{"version":3,"sources":["components/IntegerSelector/IntegerSelector.module.css","screens/CodeActivated/CodeActivated.module.css","core/config/config.ts","navigation/domainRouter.ts","components/CertificateBlock/CertificateBlock.tsx","components/Footer/Footer.tsx","themes/default/defaultThemeText.ts","themes/black/blackThemeText.ts","themes/useTheme.tsx","screens/CertificateScreen/CertificateScreen.tsx","components/AdvicesBlock/AdvicesBlock.tsx","components/CustomButton/CustomButton.tsx","components/BottomMainBlock/BottomMainBlock.tsx","components/CustomInput/CustomInput.tsx","components/CustomCheckbox/CustomCheckbox.tsx","components/Selector/SubscriptionSelect.tsx","components/PaymentMethodSelector/PaymentMethodSelector.tsx","components/Calculator/Calculator.tsx","core/http/fetch.hook.ts","components/IntegerSelector/IntegerSelector.tsx","components/Selector/Selector.tsx","core/http/HttpService.ts","core/activateCodePromocode/api.ts","core/activateCodePromocode/controller.ts","components/PromoCalculator/PromoCalculator.tsx","components/UpperMainBlock/UpperMainBlock.tsx","themes/useTimer.tsx","core/buyGiftSubscription/api.ts","core/buyGiftSubscription/controller.ts","screens/MainScreen/MainScreen.tsx","screens/CertificateOpen/PartnerCertificate.tsx","screens/CertificateOpen/CertificateSheet.tsx","screens/CertificateOpen/CertificateOpen.tsx","navigation/MainRoutes.tsx","core/activatePromoCode/api.ts","core/activatePromoCode/controller.ts","screens/CodeActivation/CodeActivation.tsx","screens/CodeActivated/CodeActivated.tsx","navigation/CodeRoutes.tsx","components/CorporateCalculator/CorporateRadio.tsx","components/CorporateCalculator/CorporateCalculator.tsx","components/UpperCorporateBlock/UpperCorporateBlock.tsx","screens/CorporateSubscription/CorporateSubscription.tsx","core/buyCorporateSubscription/controller.ts","screens/ManagerScreen/ManagerScreen.tsx","navigation/CorporativeRoutes.tsx","core/buySubscription/api.ts","screens/BuySubscription/BuySubscription.tsx","core/buySubscription/controller.ts","navigation/DomainRoutes.tsx","navigation/PromoRoutes.tsx","index.tsx","components/CorporateCalculator/CorporateCalculator.module.css","screens/ManagerScreen/ManagerScreen.module.css","components/CorporateCalculator/CorporateRadio.module.css","themes/default/default.module.css","themes/pink/pink.module.css","themes/black/black.module.css","components/UpperCorporateBlock/UpperCorporateBlock.module.css"],"names":["module","exports","config","apiUrl","window","_prosto_env_","REACT_APP_API_URL","process","tinkoffTerminalKey","REACT_APP_TERMINAL_KEY","giftRoute","REACT_APP_GIFT_ROUTE","codeRoute","REACT_APP_CODE_ROUTE","corpRoute","REACT_APP_CORP_ROUTE","promoRoute","REACT_APP_PROMO_ROUTE","privacyUrl","rulesUrl","domainRouter","go","domain","location","host","currentHost","podarokItems","image","text","isForeverItems","pinkItems","blackFridayItems","CertificateInstructionsBlock","isBlackFriday","isPink","isForever","items","color","className","map","item","key","src","height","style","Footer","backgroundColor","textColor","linkColor","showSellerInfo","thisYear","Date","getFullYear","borderColor","href","defaultThemeText","calcTitle","calcSubtitle","title","subtitle","subtitleExtra","useHolidaysTheme","themeText","styles","nextTimeout","isHoliday","today","moment","get","thisMonth","format","isBirthday","defaultStyles","currentDayNumber","daysLeft","CertificateScreen","search","substring","yandexMetrikaCounters","accounts","options","ymOptions","version","display","flexDirection","alignItems","gap","width","marginTop","justifyContent","textAlign","marginBottom","marginLeft","letter","certificate","wallet","corpItems","AdvicesBlock","isCorp","CustomButton","onClick","icon","disabled","downloadIcon","BottomMainBlock","onActivateClick","removeTitle","buttonTitle","firstImage","firstText","secondText","mainScreen","zIndex","id","CustomInput","placeholder","defaultValue","onChange","inputClassName","minLength","maxLength","type","CustomCheckbox","value","checked","htmlFor","fontFamily","fontSize","dates","SubscriptionSelect","availableSubscriptions","activeSubscription","onSelect","onSelectChange","useCallback","event","target","find","availableSubscription","months","Number","subscription","toString","alt","PaymentMethodSelector","onPaymentMethodChange","newValue","currentTarget","Root","RadioItem","RadioInput","Text","Calculator","data","onDataChange","setAvailableSubscriptions","useState","setActiveSubscription","price","discount1","discount2","finalPrice","response","subscriptionPrices","url","isLoading","setIsLoading","setResponse","useEffect","fetch","then","res","json","catch","err","console","log","useFetch","handleEmailChange","email","toLowerCase","trim","emailCheckboxTouched","setEmailCheckboxTouched","handleConfirmEmailCheckbox","isValidEmail","confirmEmail","onSelectSubscription","undefined","podarok","avo","length","sort","a","b","createMarkup","split","str","margin","paddingLeft","paymentMethod","loading","canPay","checkCanDecrease","IntegerSelector","setValue","canIncrease","setCanIncrease","canDecrease","setCanDecrease","updateCans","handleIncreaseClick","handleDecreaseClick","handleInputBlur","handleInputChange","parseInt","isNaN","IconContainer","LeftIcon","Disabled","InputContainer","Input","onBlur","RightIcon","Selector","getPrice","showCountSelector","useCorporateDiscount","promoCalculator","useAvoDiscount","count","setCount","setPrice","discount","setDiscount","corporateDiscount","setCorporateDiscount","benefit","Math","round","preciseBenefit","ceil","newPrice","month","handleMonthsChange","handleCountChange","async","request","method","timeout","headers","axiosResponse","axios","prepareData","transformRequest","requestData","requestHeaders","setHeaderContentType","serverData","makeResponse","httpStatus","status","responseStatus","statusCode","success","timestamp","message","error","e","params","FormData","JSON","stringify","httpService","queryData","settings","this","addQueryParams","post","delete","put","patch","resultUrl","isFirst","PROMO_CODES_CODE_URL","ActivatePromoCodeCodeApi","activate","promocode","encoding","ACTIVATE_ERRORS","ActivateCodePromocodeController","api","activateCodePromocode","errorMessage","PromoCalculator","controller","promocodeDiscount","setPromocodeDiscount","phone","setPhone","phoneFlag","setPhoneFlag","code","setCode","codeData","setCodeData","setError","codeReq","setCodeReq","dayDiscount","dayDiscountWithPromocode","priceInfo","floor","handleCodeChange","replace","toUpperCase","handlePhone","onClickCode","activateResult","sumBenefit","onClickResetCode","country","inputProps","required","autoFocus","specialLabel","toLocaleString","UpperMainBlock","onBuyClick","show","tillDate","useLayoutEffect","MegaTimer","UpperMainRoot","ProstoAppIcon","Timer","TimerText","BackgroundImageContainer","BackgroundImage","MainBlock","LeftTextContainer","MainContainer","HowItWorks","TextContainer","MainTitle","MainSubtitle","AdditionalText","WavesBackground","MobileTitle","PROMO_CODES_URL","BuyGiftSubscriptionApi","createPromoCode","BuyGiftSubscriptionController","buyPromoCode","promoCode","isCorporate","amountTotal","paymentLink","link","requestUserPayment","form","createTinkoffForm","totalPrice","orderId","description","pay","receiptData","Email","EmailCompany","Taxation","Items","Name","Price","Quantity","Amount","Tax","document","createElement","fields","createDocumentFragment","appendChild","createInput","name","input","test","MainScreen","screenState","setScreenState","promocodeId","handleDataChange","newState","handleBuyClick","debounce","generalPixel","postClick","alert","leading","trailing","handleActivateClick","PARTNERS","present","logo","gift","instructionsLink","info","PartnerCertificate","partner","copiedToClipboard","setCopiedToClipboard","copyCodeToClipboard","navigator","clipboard","writeText","paddingTop","lineHeight","alignSelf","background","borderRadius","padding","overflow","marginRight","alignContent","paddingRight","cursor","CertificateSheet","visible","setVisible","downloadPdf","PDF_DOWNLOAD_URL","position","top","opacity","transition","paddingBottom","fontWeight","textDecoration","border","flex","animationOptions","loop","autoplay","animationData","require","rendererSettings","preserveAspectRatio","introAnimation","introAnimationMobile","openAnimation","openAnimationMobile","openAnimationYear","openAnimationYearMobile","CertificateOpen","isMobile","screen","availWidth","URLSearchParams","introPlayed","setIntroPlayed","showOpenAnimation","setShowOpenAnimation","showCertificateSheet","setShowCertificateSheet","openCertificate","isClickToPauseDisabled","eventListeners","eventName","callback","MainRoutes","exact","path","component","ActivatePromoCodeApi","activatePromoCode","activatePromoCodeData","CodeActivation","activationType","setActivationType","setEmail","confirmCorrectInput","setConfirmCorrectInput","history","useHistory","validateForm","handleActivation","push","handleBuy","handleCode","phoneNumber","handleEmail","changeActivationType","enableLongNumbers","CodeActivated","handleIOsClick","handleAndroidClick","AppIcon","UpperBlock","ActivatedIcon","TitleText","Buttons","Button","CodeRoutes","CorporateRadio","handleChange","CorporateCalculator","handlePhoneChange","handleCompanyChange","companyName","handleINNChange","inn","handleWorkPhoneChange","workPhone","handleAddressChange","legalAddress","subscriptionCount","subscriptionDuration","subscriptionPrice","handlePromoCodeChange","handlePayMethodChange","payMethod","CalculatorBlock","CalculatorTitleContainer","CalculatorTitle","PhoneInput","CalculatorAdditionalText","CalculatorBottomBlock","CalculatorBottomLeftBlock","CalculatorTextFirst","CalculatorTextSecond","CalculatorText","CalculatorBottomRightBlock","CalculatorBottomRightBlockText","CalculatorText2x","PromoCodeInput","CalculatorFooter","CalculatorOffer","UpperCorporateBlock","discountCorporation","EMAIL_REG","isValidPhone","INN_REG","PROMO_CODE_REG","isValidPromoCode","isValidName","CorporateSubscription","screenStateCard","setScreenStateCard","ManagerScreen","ManagerIcon","CorporativeRoutes","BuySubscriptionApi","createSubscription","buySubscription","BuySubscription","pathname","state","SCREENS","clickmap","trackLinks","accurateTrackBounce","webvisor","trackHash","DomainRoutes","Screen","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.3409e786.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"Root\":\"IntegerSelector_Root__2_qT1\",\"IconContainer\":\"IntegerSelector_IconContainer__3WLTM\",\"Disabled\":\"IntegerSelector_Disabled__2zrZc\",\"LeftIcon\":\"IntegerSelector_LeftIcon__3nkpj\",\"RightIcon\":\"IntegerSelector_RightIcon__2fXI3\",\"InputContainer\":\"IntegerSelector_InputContainer__1C84y\",\"Input\":\"IntegerSelector_Input__Y_SrT\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Root\":\"CodeActivated_Root__KLABe\",\"AppIcon\":\"CodeActivated_AppIcon__20Hhz\",\"ActivatedIcon\":\"CodeActivated_ActivatedIcon__3PowN\",\"TitleText\":\"CodeActivated_TitleText__3HKP_\",\"Text\":\"CodeActivated_Text__HU0qG\",\"Buttons\":\"CodeActivated_Buttons__3cBC2\",\"Button\":\"CodeActivated_Button__Tr0UK\"};","const config = {\n  apiUrl:\n    window._prosto_env_.REACT_APP_API_URL ||\n    process.env.REACT_APP_API_URL ||\n    \"\",\n  tinkoffTerminalKey:\n    window._prosto_env_.REACT_APP_TERMINAL_KEY ||\n    process.env.REACT_APP_TERMINAL_KEY ||\n    \"\",\n  giftRoute:\n    window._prosto_env_.REACT_APP_GIFT_ROUTE ||\n    process.env.REACT_APP_GIFT_ROUTE ||\n    \"\",\n  codeRoute:\n    window._prosto_env_.REACT_APP_CODE_ROUTE ||\n    process.env.REACT_APP_CODE_ROUTE ||\n    \"\",\n  corpRoute:\n    window._prosto_env_.REACT_APP_CORP_ROUTE ||\n    process.env.REACT_APP_CORP_ROUTE ||\n    \"\",\n  promoRoute:\n  window._prosto_env_.REACT_APP_PROMO_ROUTE ||\n  process.env.REACT_APP_PROMO_ROUTE ||\n  \"\",\n  privacyUrl: 'https://help.prostoapp.ru/#!/tab/437811820-1',\n  rulesUrl: 'https://help.prostoapp.ru/birthday',\n};\n\nexport default config;\n","class DomainRouter {\n  go(domain: string): void {\n    window.location.host = domain;\n  }\n\n  get currentHost(): string {\n    return window.location.host;\n  }\n}\n\nconst domainRouter = new DomainRouter();\nexport default domainRouter;\n","import React from 'react';\nimport './CertificateBlock.css';\n\nconst sleep = \"images/black-friday/sleep.png\";\nconst meditation = \"images/black-friday/meditation.png\";\nconst irena = \"images/black-friday/irena.png\";\n\nconst podarokItems = [\n  { image: \"images/CertificateDownload.png\", text: 'Скачайте доступ из письма' },\n  { image: \"images/Letter.png\", text: 'Распечатайте доступ и подарите, или перешлите его тому, кому делаете подарок' },\n  { image: \"images/Certificate.png\", text: 'Получатель доступа сможет легко активировать промокод. Инструкция есть во вложении письма' },\n  { image: \"images/screenshot.png\", text: 'Выложи скриншот о покупке в stories, отметь @prosto.meditation и участвуй в розыгрыше ценных призов' }\n]\n\nconst isForeverItems = [\n  { image: \"images/forever/download.png\", text: 'Скачайте доступ из письма' },\n  { image: \"images/forever/letter.png\", text: 'Распечатайте доступ и подарите, или перешлите его тому, кому делаете подарок' },\n  { image: \"images/forever/certificate.png\", text: 'Получатель сможет легко активировать промокод. Инструкция есть во вложении письма' },\n  { image: \"images/forever/screenshot.png\", text: 'Выложи скриншот о покупке в stories, отметь @prosto.meditation и участвуй в розыгрыше ценных призов' }\n]\n\nconst pinkItems = [\n  { image: \"images/pink/download.png\", text: 'Скачайте доступ из письма' },\n  { image: \"images/pink/letter.png\", text: 'Распечатайте доступ и подарите, или перешлите его тому, кому делаете подарок' },\n  { image: \"images/pink/ticket.png\", text: 'Получатель сертификата сможет легко активировать промокод. Инструкция есть в сертификате' },\n  { image: \"images/pink/screenshot.png\", text: 'Выложи скриншот о покупке в stories, отметь @prosto.meditation и участвуй в розыгрыше ценных призов' }\n]\n\nconst blackFridayItems = [\n  { image: sleep, text: '«Prosto: медитация и сон» станет вашей внутренней опорой и поможет выработать привычку медитировать каждый день.' },\n  { image: meditation, text: 'Практики ментальной устойчивости помогут побороть стресс, тревогу, злость, срывы в питании и проблемы со сном.' },\n  { image: irena, text: 'Prosto.Конференция поможет выстроить гармоничные отношения с окружающим миром.' }\n]\n\ninterface IProps {\n  isBlackFriday?: boolean\n  isPink?: boolean\n  isHoliday?: boolean\n  isForever?: boolean\n}\n\nconst CertificateInstructionsBlock: React.FC<IProps> = ({\n  isBlackFriday = false, isPink, isForever\n}) => {\n  const items = isBlackFriday ? blackFridayItems :\n    isPink ? pinkItems :\n      isForever ? isForeverItems :\n        podarokItems\n\n  const color = isForever || isBlackFriday ? '#fff' : '#000'\n\n  return (\n    <div className=\"CertificateMainBlock\">\n      {items.map((item, key) => (\n        <div key={key} className=\"CertificateContainer\">\n          <img className=\"CertificateImage\" src={item.image} height={isBlackFriday ? 120 : 50} />\n          <p className=\"CertificateText\" style={{ color }}>{item.text}</p>\n        </div>\n      ))}\n      {/* {isHoliday &&\n        <div className=\"CertificateContainer\">\n          <img className=\"CertificateImage\" src={screenshot} style={{marginTop: -15}} />\n          <p className=\"CertificateText\" style={{ color }}>\n            Выложи скриншот<br />\n            о покупке в stories,<br />\n            отметь <b>@prosto.meditation</b> <br />\n            и участвуй в розыгрыше <br />\n            ценных призов</p>\n        </div>\n      } */}\n    </div>\n  );\n}\n\nexport default CertificateInstructionsBlock;\n","import React from 'react';\nimport './Footer.css';\n\ninterface IProps {\n  backgroundColor?: string;\n  textColor?: string;\n  linkColor?: string;\n  showSellerInfo?: boolean\n}\nconst Footer: React.FC<IProps> = ({ backgroundColor, textColor, linkColor = '#33B49D', showSellerInfo = true }) => {\n  const thisYear = new Date().getFullYear()\n\n  return (\n    <div className=\"FooterBlock\" style={{ backgroundColor: backgroundColor || '#fff' }}>\n      <p className=\"FooterText\" style={{ color: textColor || '#000' }}>© Просто {thisYear}</p>\n      <div className=\"FooterButtonContainer\">\n        <a style={{ color: linkColor, borderColor: linkColor }} className=\"FooterLink\" href=\"https://apps.apple.com/ru/app/просто-медитация-и-сон/id1490891826?mt=8\">\n          Appstore\n        </a>\n        <a style={{ color: linkColor, borderColor: linkColor }} className=\"FooterLink\" href='https://play.google.com/store/apps/details?id=com.prostoapp&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'>\n          GooglePlay\n        </a>\n      </div>\n      <p className=\"FooterText\" style={{ color: textColor || '#000' }}>\n        Служба поддержки\n        <a style={{ color: linkColor, borderColor: linkColor }} href=\"mailto: pr@prostoapp.com\" className=\"FooterMail\"> pr@prostoapp.com </a>\n      </p>\n      <br />\n\n      <p className=\"FooterText\">\n        *лучшее приложение для медитации<br />\n        на русском языке по версии data.ai\n      </p>\n      {showSellerInfo &&\n        <p className=\"FooterText\">\n          ИНДИВИДУАЛЬНЫЙ ПРЕДПРИНИМАТЕЛЬ БАРСУКОВ АЛЕКСАНДР АЛЕКСАНДРОВИЧ,\n          ИНН 366208819519, ОГРН 316366800118452,\n          pr@prostoapp.com, 89608576775\n        </p>\n      }\n\n    </div>\n  );\n}\n\n\nexport default Footer;\n","export const defaultThemeText = {\n  calcTitle: 'Оплатить сертификат',\n  calcSubtitle: '',\n  title: 'Prosto — твоя внутренняя опора',\n  subtitle: 'Многие из вас столкнулись с тем, что не могут продлить подписку на приложение в Apple Store и Google Play.',\n  subtitleExtra: 'Чтобы вне зависимости от обстоятельств вы имели доступ к Prosto app, вы можете сегодня оплатить сертификат для себя или близкого человека на удобный для вас период, а активировать его позже.',\n}","export const blackThemeText = {\n  calcTitle: `Prosto Box для \n  ментального здоровья`,\n  calcSubtitle: 'со скидкой 74%',\n  title: 'Впервые за всю историю проекта мы устраиваем Чёрную пятницу',\n  subtitle: `Только 24 ноября в продаже бокс для ментального здоровья вашей Кукушечки:`,\n  subtitleExtra: `\n  • Доступ Prosto на 3 года\n  • Онлайн-практикум ментальной устойчивости, доступ на 6 месяцев \n  • Онлайн-конференция Prosto, доступ навсегда\n  ❤️ Можно оплатить банковской картой\n  ❤️ Доступны ко всем материалам придут вам на почту\n  ❤️ Все покупатели набора в Черную пятницу могут выиграть призы\n  `,\n}","import { defaultThemeText } from \"./default/defaultThemeText\";\nimport { pinkThemeText } from \"./pink/pinkThemeText\";\nimport { birthdayThemeText } from \"./birthday/birthdayThemeText\";\nimport defaultStyles from './default/default.module.css';\nimport pinkStyles from './pink/pink.module.css';\nimport blackStyles from './black/black.module.css';\nimport moment from 'moment-timezone';\nimport { blackThemeText } from \"./black/blackThemeText\";\n\nexport const useHolidaysTheme = () => {\n  let themeText, styles, isHoliday = false, nextTimeout\n  const today = moment().get('date')\n  let daysLeft = 0\n  let currentDayNumber = 0\n  const thisMonth = moment().format('MM')\n  const thisYear = moment().get('year')\n  // const isPink = moment().isBetween(`${thisYear}-01-11 10:00`, `${thisYear}-02-13 23:59`)\n  const isPink = false\n  // const isBirthday = moment().isBetween(`${thisYear}-09-21 10:30`, `${thisYear}-09-24 12:01`)\n  const isBirthday = false\n  // const isBlackFriday = moment().isBetween(`${thisYear}-11-22 00:00`, +moment.tz(`${thisYear}-11-25 13:30`, \"Europe/Moscow\").toDate())\n  const isBlackFriday = false\n  isHoliday = isBirthday || isPink || isBlackFriday\n  if (isBirthday) {\n    nextTimeout = +moment.tz(`${thisYear}-09-24 12:00`, \"Europe/Moscow\").toDate()\n    themeText = birthdayThemeText\n    styles = defaultStyles\n  } else if (isPink) {\n    nextTimeout = +moment.tz(`${thisYear}-02-14 20:00`, \"Europe/Moscow\").toDate()\n    // daysLeft = 14 - today\n    // currentDayNumber = today - 10\n    themeText = pinkThemeText\n    styles = pinkStyles\n  } else if (isBlackFriday) {\n    nextTimeout = +moment.tz(`${thisYear}-11-25 13:30`, \"Europe/Moscow\").toDate()\n    themeText = blackThemeText\n    styles = blackStyles\n  } else {\n    themeText = defaultThemeText\n    styles = defaultStyles\n  }\n\n  return {\n    today,\n    thisMonth,\n    currentDayNumber,\n    daysLeft,\n    themeText,\n    styles,\n    isHoliday,\n    isPink,\n    isBirthday,\n    isBlackFriday,\n    nextTimeout,\n  }\n}","import React, { } from 'react';\nimport CertificateInstructionsBlock from '../../components/CertificateBlock/CertificateBlock';\nimport CustomButton from '../../components/CustomButton/CustomButton';\nimport Footer from '../../components/Footer/Footer';\nimport { useHolidaysTheme } from '../../themes/useTheme';\nimport './CertificateScreen.css';\nimport { YMInitializer } from 'react-yandex-metrika';\nimport { ymOptions } from '../../navigation/DomainRoutes';\n\nconst voices = \"images/voices.png\";\nconst voicesMobile = \"images/voices-mobile.png\";\n\nconst CertificateScreen: React.FC = () => {\n  // domainRouter.currentHost\n  // console.log('domainRouter.currentHost', domainRouter.currentHost)\n  const isForever = window.location.search.substring(1) === 'isForever'\n  const isHoliday = true\n  const { isBirthday, isBlackFriday, isPink, styles } = useHolidaysTheme()\n  const yandexMetrikaCounters = isForever ? [98501558] : [98498599]\n  // console.log('yandexMetrikaCounters', yandexMetrikaCounters)\n\n  return (\n    <>\n      <YMInitializer accounts={yandexMetrikaCounters} options={ymOptions} version=\"2\" />\n      <div className={isForever ? \"ForeverCertificateBlock\" : \"CertificateBlock\"}>\n        {/* {isBirthday && <img className=\"AppIcon\" src={birthdayIcon} />}\n      {isPink && <img className={styles.AppIcon || \"AppIcon\"} src={\"images/pink/pink-logo.png\"} />} */}\n        <div style={{ display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 15 }}>\n          {isForever ? <>\n            <img width={270} height={92} src={\"images/forever/certificate-icon.png\"} />\n            <img width={114} height={69} src={\"images/letter-sent-white.png\"} />\n          </> : <>\n            <img width={76} height={76} src={\"images/app-icon.png\"} />\n            <img width={114} height={69} src={\"images/letter-sent.png\"} />\n          </>}\n        </div>\n\n        {/* {isPink && <img className={styles.CertificatesTitleImage || \"AppIcon\"} src={\"images/pink/sent-letter.png\"} />} */}\n\n        <div className=\"hideOnMobile\">\n          <div style={{ width: '100%', display: 'flex', flexDirection: 'column' }}>\n            <p className=\"TitleText\" style={{ color: isForever ? '#fff' : '#000', marginTop: 10 }}>\n              Поздравляем с покупкой доступа\n              <br />\n              {isForever ?\n                <>\n                  Prosto Навсегда\n                  {/* <span style={{ color: '#FFB700' }}>со скидкой 67%</span> */}\n                  🎉\n                </> : <>\n                  Prosto на год\n                  {/* <span style={{ color: '#33B49D' }}>со скидкой 67%</span> */}\n                  🎉\n                </>\n              }\n              <br />\n              Проверьте вашу почту!\n            </p>\n            <div style={{ display: 'flex', justifyContent: 'center' }}>\n              <img width={550} src={voices} />\n              <p className=\"CertificateText\"\n                style={{ color: isForever ? '#fff' : '#000', width: 260, textAlign: 'left' }}\n              >\n                С нами более <b>3 миллионов пользователей</b> — присоединяйся!\n                <br /><br />\n                Российские звёзды медитируют сами и их голоса ведут тебя в медитациях:\n                <br /><br />\n                Юра Борисов<br />\n                Никита Ефремов<br />\n                Максим Матвеев<br />\n                Равшана Куркова<br />\n                Дарья Мельникова<br />\n                Марина Александрова<br />\n                Ирена Понарошку<br />\n                Сергей Чонишвили<br />\n                Н. Н. Дроздов<br />\n              </p>\n            </div>\n          </div>\n        </div>\n\n        <div className=\"hideOnDesktop\">\n\n          <div style={{ width: '100%', display: 'flex', flexDirection: 'column' }}>\n            <p className=\"TitleText\" style={{ color: isForever ? '#fff' : '#000', marginTop: 10 }}>\n              Поздравляем с покупкой <br />\n              доступа Prosto\n              <br />\n              {isForever ?\n                <>\n                  Навсегда \n                  {/* <span style={{ color: '#FFB700' }}>со скидкой 67%</span> */}\n                   🎉\n                </> : <>\n                  на год \n                  {/* <span style={{ color: '#33B49D' }}>со скидкой 67%</span> */}\n                   🎉\n                </>\n              }\n              <br />\n              Проверьте вашу почту!\n            </p>\n            <p className=\"CertificateText\" style={{ color: isForever ? '#fff' : '#000' }}>\n              С нами более <b>3 000 000</b> человек — <br />\n              присоединяйся!\n              <br /><br />\n              Российские звёзды медитируют сами <br />\n              и их голоса ведут тебя в медитациях:\n              <br />\n            </p>\n            <br />\n            <p className=\"CertificateText\"\n              style={{ color: isForever ? '#fff' : '#000', marginBottom: -200, textAlign: 'left', marginLeft: '50%' }}\n            >\n              Юра Борисов<br />\n              Никита Ефремов<br />\n              Максим Матвеев<br />\n              Равшана Куркова<br />\n              Дарья Мельникова<br />\n              Марина Александрова<br />\n              Ирена Понарошку<br />\n              Сергей Чонишвили<br />\n              Н. Н. Дроздов<br />\n            </p>\n            <img src={voicesMobile} width={'100%'} />\n          </div>\n        </div>\n\n        <CertificateInstructionsBlock\n          isHoliday={isHoliday}\n          isBlackFriday={isBlackFriday}\n          isPink={isPink}\n          isForever={isForever}\n        />\n\n        {/* {\n          isHoliday && (\n            <>\n              <p className={styles.TitleTextBottom || \"TitleTextBottom\"}\n                style={{ color: isForever ? '#fff' : '#000', }}\n              >\n                Участвуй в розыгрыше подарков\n                общей стоимостью более <br className='hideOnDesktop' />1 000 000₽\n                в наших соцсетях! <br />\n                Жми, чтобы увидеть условия 👇\n              </p>\n\n              <div style={{ display: 'flex', justifyContent: 'center', marginBottom: 20 }}>\n                <a className=\"Link\" href=\"https://www.instagram.com/prosto.meditation\" target='_blanc'>\n                  <CustomButton\n                    className={'CustomButton'}\n                    style={{\n                      backgroundColor: isForever ? '#FFB700' : '#33B49D',\n                      color: isForever ? '#000' : '#fff'\n                    }}\n                    title={'Участвовать'}\n                    icon={isForever ? 'images/instagram-black.png' : 'images/instagram-white.png'}\n                  />\n                </a>\n              </div>\n            </>\n          )\n        } */}\n\n        <Footer\n          showSellerInfo={false}\n          backgroundColor={'transparent'}\n          textColor={isForever ? '#fff' : '#000'}\n          linkColor={isForever ? '#fff' : '#33B49D'}\n        />\n      </div >\n    </>\n  );\n}\n\nexport default CertificateScreen;\n","import React from 'react';\nimport './AdvicesBlock.css';\n\ninterface IProps {\n  isBlackFriday?: boolean\n  isPink?: boolean\n  isCorp?: boolean\n  firstImage?: string;\n  firstText?: string;\n  secondText?: string;\n  items?: any\n}\n\nconst letter = \"images/Letter.png\";\nconst certificate = \"images/Certificate.png\";\nconst certificateInLetter = \"images/CertificateInLetter.png\"\nconst blackCertificateInLetter = \"images/black-friday/BlackCertificateInLetter.png\"\nconst wallet = \"images/Wallet.png\";\nconst access = \"images/black-friday/access.png\"\nconst hours24 = \"images/black-friday/24.png\"\nconst envelope = \"images/black-friday/letter.png\"\n\nconst blackFridayItems = [\n  {\n    image: access,\n    text: `Вы покупаете доступ к эксклюзивному контенту Prosto: конференции и онлайн-интенсива нет в открытом доступе`\n  },\n  {\n    image: hours24,\n    text: `Только 24 часа на покупку Prosto Box для ментального здоровья со скидкой 74%`\n  },\n  {\n    image: envelope,\n    text: `Доступы и инструкция придут вам на почту после оплаты`\n  },\n]\n\nconst corpItems = [\n  {\n    image: wallet,\n    text: \"Оплатите подарочный сертификат на подписку для ваших сотрудников\"\n  },\n  {\n    image: letter,\n    text: \"Вы получите сертификат, который можно распечатать или отправить через мессенджер\"\n  },\n  {\n    image: certificate,\n    text: `Получатель сертификата сможет легко активировать промокод, инструкция есть в сертификате`\n  },\n]\n\nconst podarokItems = [\n  {\n    image: wallet,\n    text: \"Купи сертификат на подписку в подарок или себе\"\n  },\n  {\n    image: letter,\n    text: \"Вы получите сертификат, который можно распечатать или отправить через мессенджер\"\n  },\n  {\n    image: certificate,\n    text: `Получатель сертификата сможет легко активировать промокод, инструкция есть в сертификате`\n  },\n]\n\nconst pinkItems = [\n  {\n    image: \"images/pink/wallet.png\",\n    text: \"Оплатите подарочный сертификат для себя или близкого\"\n  },\n  {\n    image: \"images/pink/letter.png\",\n    text: \"Вы получите сертификат, который можно распечатать или отправить через мессенджер\"\n  },\n  {\n    image: \"images/pink/certificate.png\",\n    text: `Получатель сертификата сможет легко активировать промокод, инструкция есть в сертификате`\n  },\n]\n\n\nconst AdvicesBlock: React.FC<IProps> = ({\n  isBlackFriday = false, isPink, isCorp = false\n}) => {\n  const items = isBlackFriday ? blackFridayItems :\n    isCorp ? corpItems :\n      isPink ? pinkItems : podarokItems\n\n  return (\n    <div className=\"AdvicesBlock\">\n      <div>\n        {items.map((item, key) => (\n          <div key={key} className=\"AdvicesContainer\">\n            <img className=\"AdvicesImage\" src={item.image} />\n            <p className=\"AdvicesTextFirst\">{item.text}</p>\n          </div>\n        ))}\n      </div>\n      <div>\n        <img className=\"AdvicesLetterImage\" src={isBlackFriday ? blackCertificateInLetter : certificateInLetter} />\n      </div>\n    </div>\n  );\n}\n\nexport default AdvicesBlock;\n","import React from 'react';\nimport './CustomButton.css';\n\nconst downloadIconImage = \"images/Download.png\";\n\nexport interface ICustomButtonProps {\n  title: string;\n  onClick?: () => void;\n  icon?: string\n  disabled?: boolean;\n  downloadIcon?: boolean;\n  className?: string;\n  style?: any\n}\n\nconst CustomButton: React.FC<ICustomButtonProps> = ({ title, onClick, icon, disabled, downloadIcon, className = \"\", style = {} }) => {\n  return (\n    <div className={`CustomButtonBlock ${className}`}>\n      <button className=\"CustomButton\" onClick={onClick} disabled={disabled} style={style}>\n        {icon && <img className=\"ButtonIcon\" src={icon} />}\n        {downloadIcon && <img className=\"ButtonIcon\" src={downloadIconImage} />}\n        <span>{title}</span>\n      </button>\n    </div>\n  );\n}\n\nexport default CustomButton;\n","import React from 'react';\nimport AdvicesBlock from '../AdvicesBlock/AdvicesBlock';\nimport CustomButton from '../CustomButton/CustomButton';\nimport { useHolidaysTheme } from '../../themes/useTheme';\nimport './BottomMainBlock.css';\n\ninterface IProps {\n  onActivateClick: () => void;\n  removeTitle?: boolean;\n  buttonTitle?: string;\n  downloadIcon?: boolean;\n  firstImage?: string;\n  firstText?: string;\n  secondText?: string;\n  mainScreen?: boolean;\n  isCorp?: boolean\n}\n\nconst BottomMainBlock: React.FC<IProps> = ({ onActivateClick, removeTitle, buttonTitle, downloadIcon, firstImage, firstText, secondText, mainScreen = true, isCorp = false }) => {\n  const { isBlackFriday, isPink, styles } = useHolidaysTheme()\n\n  return (\n    <div className=\"MainBottomBlock\" style={{\n      zIndex: 1,\n      backgroundColor: isBlackFriday ? '#EFECEC' : '#fff'\n    }}>\n      <a id=\"advices\" className=\"Title\">Как это работает?</a>\n\n      <AdvicesBlock\n        isCorp={isCorp}\n        isBlackFriday={isBlackFriday}\n        isPink={isPink}\n      />\n\n      <div className=\"BottomMainBlockButton\">\n        <CustomButton\n          className={styles['CustomButton']}\n          downloadIcon={downloadIcon}\n          title={buttonTitle || 'Активировать промокод'}\n          onClick={onActivateClick}\n        />\n      </div>\n    </div>\n  );\n}\n\nexport default BottomMainBlock;\n","import React from 'react';\nimport './CustomInput.css';\n\nexport interface ICustomInputProps {\n  placeholder: string;\n  defaultValue?: string;\n  onChange?: (event: React.ChangeEvent<HTMLInputElement>) => void;\n  className?: string;\n  inputClassName?: string;\n  minLength?: number;\n  maxLength?: number;\n  type?: string;\n}\n\nconst CustomInput: React.FC<ICustomInputProps> = ({\n  placeholder,\n  defaultValue = '',\n  onChange,\n  className, inputClassName= \"Email\",\n  minLength, maxLength,\n  type\n}) => {\n  return (\n    <div className={className}>\n      <input\n        className={inputClassName}\n        placeholder={placeholder}\n        onChange={onChange}\n        minLength={minLength}\n        maxLength={maxLength}\n        type={type}\n        defaultValue={defaultValue}\n      />\n    </div>\n  );\n}\n\nexport default CustomInput;\n","import React from 'react';\nimport './CustomCheckbox.css';\n\nexport interface ICustomCheckboxProps {\n  title: string;\n  value: boolean;\n  onChange: (val: boolean) => void;\n  disabled?: boolean;\n}\n\nconst CustomCheckbox: React.FC<ICustomCheckboxProps> = ({ title, value, onChange, disabled }) => {\n  return (\n    <div className=\"checkbox\">\n      <input\n        title='confirm-checkbox'\n        className=\"custom-checkbox\"\n        id=\"confirm-checkbox\"\n        type=\"checkbox\"\n        checked={value}\n        onChange={() => { }}\n      />\n      <label\n        htmlFor=\"confirm-checkbox\"\n        style={{\n          fontFamily: 'Gotham Pro Regular',\n          fontSize: 16\n        }}\n        onClick={() => !disabled && onChange(!value)}>{title}</label>\n    </div>\n  );\n}\n\nexport default CustomCheckbox;\n","import React, { useCallback } from 'react';\nimport './Selector.css';\nimport IntegerSelector from \"../IntegerSelector/IntegerSelector\";\nimport { ISubscription } from '../Calculator/Calculator';\n\nconst selectorIcon = \"images/Selector.png\";\n\ninterface IDates {\n  [key: string]: string;\n}\n\nconst dates: IDates = {\n  1: \"1 месяц\",\n  3: \"3 месяца\",\n  6: \"6 месяцев\",\n  12: \"12 месяцев\",\n};\n\ninterface IProps {\n  availableSubscriptions: ISubscription[]\n  activeSubscription: ISubscription\n  onSelect: (subscription: ISubscription) => void\n}\n\nconst SubscriptionSelect: React.FC<IProps> = ({\n  availableSubscriptions, activeSubscription, onSelect,\n}) => {\n\n  // const handleCountChange = useCallback((newValue: number) => {\n  //   if (newValue >= 3) {\n  //     setCount(newValue);\n  //   }\n  // }, [])\n\n  const onSelectChange = useCallback((event: React.ChangeEvent<HTMLSelectElement>) => {\n    const { value } = event.target\n    onSelect(availableSubscriptions.find(\n      availableSubscription => availableSubscription.months === Number(value)\n    ) || availableSubscriptions[0])\n  }, [onSelect, availableSubscriptions])\n\n  return (\n    <div>\n      {/* {showCountSelector && <IntegerSelector className=\"IntegerSelector\" onChange={handleCountChange} />} */}\n      <div className=\"Selector\">\n        <div>\n          <select\n            title='select'\n            onChange={onSelectChange}\n            className=\"InputDate\"\n            value={activeSubscription.months}\n          // defaultValue={availableSubscriptions[0]?.months}\n          // disabled={useAvoDiscount}\n          >\n            {\n              availableSubscriptions.map((subscription) => (\n                <option key={subscription.months} value={subscription.months}>\n                  {dates[subscription.months.toString()]}\n                </option>\n              ))\n            }\n          </select>\n          {dates[activeSubscription.months]}\n          <img alt='select' className=\"SelectorImage\" src={selectorIcon} />\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default SubscriptionSelect;\n","import React, { useCallback } from \"react\";\nimport { Label, Radio } from \"theme-ui\";\nimport { TPaymentMethod } from \"../../core/buyGiftSubscription/controller\";\n\nimport styles from \"../CorporateCalculator/CorporateRadio.module.css\";\n\n\ninterface IPaymentMethodSelectorProps {\n  value: TPaymentMethod;\n  onChange: (value: TPaymentMethod) => void;\n}\n\nexport const PaymentMethodSelector = ({ value, onChange }: IPaymentMethodSelectorProps) => {\n\n  const onPaymentMethodChange = useCallback(\n    (event: React.ChangeEvent<HTMLInputElement>) => {\n      const newValue = event.currentTarget.value;\n      if (newValue !== value) {\n        onChange(newValue as TPaymentMethod);\n      }\n    }, [onChange, value]);\n\n  return (\n    <div className={styles.Root}>\n      <Label className={styles.RadioItem}>\n        <Radio\n          className={styles.RadioInput}\n          value=\"tinkoff\"\n          checked={value === \"tinkoff\"}\n          onChange={onPaymentMethodChange}\n        />\n        <span className={styles.Text}>Карта российского банка</span>\n      </Label>\n      <Label className={styles.RadioItem}>\n        <Radio\n          className={styles.RadioInput}\n          value=\"stripe\"\n          checked={value === \"stripe\"}\n          onChange={onPaymentMethodChange}\n        />\n        <span className={styles.Text}>Карта Visa, Mastercard (не Россия)</span>\n      </Label>\n    </div>\n  )\n}\n","import React, { useCallback, useEffect, useState } from 'react';\nimport CustomButton from '../CustomButton/CustomButton';\nimport CustomInput from '../CustomInput/CustomInput';\nimport './Calculator.css';\nimport { IMainScreenState } from \"../../types/IMainScreenState\";\nimport CustomCheckbox from '../CustomCheckbox/CustomCheckbox';\nimport SubscriptionSelect from '../Selector/SubscriptionSelect';\nimport { useFetch } from '../../core/http/fetch.hook';\nimport { PaymentMethodSelector } from '../PaymentMethodSelector/PaymentMethodSelector';\nimport config from '../../core/config/config';\nimport { useHolidaysTheme } from '../../themes/useTheme';\nimport { isValidEmail } from '../../screens/MainScreen/MainScreen';\nimport domainRouter from '../../navigation/domainRouter';\n\nexport interface ISubscription {\n  months: number;\n  price: number;\n  discount1: number;\n  discount2: number;\n  finalPrice: number;\n}\n\nexport interface ICalculatorProps {\n  title?: string\n  subtitle?: string\n  data: IMainScreenState;\n  onClick?: () => void;\n  onDataChange?: (state: IMainScreenState) => void;\n}\n\n// Podarok\nconst Calculator: React.FC<ICalculatorProps> = ({ title = 'Оплатить сертификат', subtitle, data, onClick, onDataChange = () => { } }) => {\n  const { isBlackFriday, styles } = useHolidaysTheme()\n\n  const [availableSubscriptions, setAvailableSubscriptions] = useState<ISubscription[]>([])\n  const [activeSubscription, setActiveSubscription] = useState<ISubscription>(\n    {\n      months: 1,\n      price: 379,\n      discount1: 0,\n      discount2: 0,\n      finalPrice: 379\n    }\n  );\n\n  const { response: subscriptionPrices } = useFetch('promocodes/prices')\n\n  const handleEmailChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n    const email = event.target.value ?? \"\";\n    onDataChange({\n      ...data,\n      email: email.toLowerCase().trim(),\n    })\n  }, [data, onDataChange])\n\n  const [emailCheckboxTouched, setEmailCheckboxTouched] = useState(false)\n  const handleConfirmEmailCheckbox = useCallback((value) => {\n    setEmailCheckboxTouched(value)\n    if (data.email === '') return\n    if (!isValidEmail(data.email)) return\n    onDataChange({\n      ...data,\n      confirmEmail: data.confirmEmail ? false : true,\n    })\n  }, [data, onDataChange])\n\n  const onSelectSubscription = useCallback((subscription: ISubscription) => {\n    setActiveSubscription(subscription)\n    onDataChange({\n      ...data,\n      months: subscription.months,\n      price: subscription.finalPrice,\n      // discount: subscription.discount,\n    });\n  }, [data, onDataChange])\n\n  useEffect(() => {\n    if (isBlackFriday) {\n      onSelectSubscription({\n        months: 36,\n        price: 4550,\n        discount1: 0,\n        discount2: 0,\n        finalPrice: 4550,\n      })\n    } else {\n      if (subscriptionPrices !== undefined) {\n        const currentHost = domainRouter.currentHost\n        console.log('currentHost', currentHost)\n        console.log('subscriptionPrices', subscriptionPrices)\n        const { podarok, avo } = subscriptionPrices\n        if (currentHost === 'avo.prostoapp.ru' && avo?.length) {\n          avo.sort((a: ISubscription, b: ISubscription) => (\n            (a.months < b.months) ? 1 : -1\n          ))\n          setAvailableSubscriptions(avo)\n          setActiveSubscription(avo[0])\n          onSelectSubscription(avo[0])\n        } else if (podarok?.length) {\n          podarok.sort((a: ISubscription, b: ISubscription) => (\n            (a.months < b.months) ? 1 : -1\n          ))\n          setAvailableSubscriptions(podarok)\n          setActiveSubscription(podarok[0])\n          onSelectSubscription(podarok[0])\n        }\n      }\n    }\n\n  }, [subscriptionPrices])\n\n  const createMarkup = (text?: string) => {\n    if (!text) return ''\n    return text.split('\\n').map((str, key) => <p key={key} style={{ margin: 0 }}>{str}</p>)\n  }\n\n  return (\n    <div className=\"CalculatorBlock\">\n      <div>\n        <div className=\"CalculatorTitle\">\n          {createMarkup(title)}\n          <p className=\"CalculatorSubitle\">{createMarkup(subtitle)}</p>\n        </div>\n\n        <CustomInput\n          placeholder=\"Ваша электронная почта*\"\n          onChange={handleEmailChange}\n        />\n\n        <p className=\"CalculatorAdditionalText\">\n          {isBlackFriday ? 'На указанную почту будут отправлены доступы' : 'На указанную почту будет отправлен сертификат'}\n        </p>\n        {isBlackFriday ?\n          <>\n            <div className='FlexBlock'>\n              <p className=\"CalculatorText\">\n                Доступ в приложение<br />\n                Prosto  <a className='Muted'>6300 ₽</a>\n              </p>\n              <p className=\"CalculatorTextBordered\">3 года</p>\n            </div>\n            <div className='FlexBlock'>\n              <p className=\"CalculatorText\">\n                Практикум ментальной<br />\n                устойчивости <a className='Muted'>5100 ₽</a>\n              </p>\n              <p className=\"CalculatorTextBordered\">6 месяцев</p>\n            </div>\n            <div className='FlexBlock'>\n              <p className=\"CalculatorText\">\n                Онлайн-конференция <br /><a className='Muted'>4900 ₽</a>\n              </p>\n              <p className=\"CalculatorTextBordered\">навсегда</p>\n            </div>\n            <div className='FlexBlock'>\n              <p className=\"CalculatorText\">\n                Итого к оплате\n              </p>\n              <p className=\"CalculatorText\"><a className='Muted'>17 100 ₽</a></p>\n              <p className=\"CalculatorText\"><b>4 550 ₽</b></p>\n            </div>\n          </> :\n          <div className=\"CalculatorBottomBlock\">\n            <div className=\"CalculatorBottomLeftBlock\">\n              <p className=\"CalculatorTextFirst\">Месяцев</p>\n              <p className=\"CalculatorText\">Цена</p>\n              {!!activeSubscription.discount1 && <p className=\"CalculatorText\">Скидка</p>}\n              {!!activeSubscription.discount2 && <p className=\"CalculatorText\">Доп.скидка</p>}\n              {!!activeSubscription.discount1 && <p className=\"CalculatorText\">Итого к оплате</p>}\n            </div>\n            <div className=\"CalculatorBottomRightBlock\">\n              <SubscriptionSelect\n                availableSubscriptions={availableSubscriptions}\n                activeSubscription={activeSubscription}\n                onSelect={onSelectSubscription}\n              />\n              <div className=\"CalculatorBottomRightBlockText\">\n                <p className=\"CalculatorText\">\n                  {activeSubscription.price} <span className=\"RubleIcon\">₽</span>\n                </p>\n                {!!activeSubscription.discount1 && <p className=\"CalculatorText\">-{activeSubscription.discount1}%</p>}\n                {!!activeSubscription.discount2 && <p className=\"CalculatorText\">-{activeSubscription.discount2}%</p>}\n                {!!activeSubscription.discount1 &&\n                  <p className=\"CalculatorText\">\n                    {activeSubscription.finalPrice} <span className=\"RubleIcon\">₽</span>\n                  </p>}\n              </div>\n            </div>\n          </div>\n        }\n\n      </div>\n      <div className=\"CalculatorFooter\">\n        <div style={{ paddingLeft: 70}}>\n          <CustomCheckbox\n            title=\"Подтверждаю, что Email введен верно\"\n            value={data.confirmEmail}\n            onChange={handleConfirmEmailCheckbox}\n          />\n        </div>\n\n        {emailCheckboxTouched && data.email === '' &&\n          <p style={{ textAlign: 'center', color: 'red' }}>Необходимо ввести Email</p>\n        }\n        {emailCheckboxTouched && data.email !== '' && !isValidEmail(data.email) &&\n          <p style={{ textAlign: 'center', color: 'red' }}>Неверный формат Email</p>\n        }\n        <PaymentMethodSelector\n          value={data.paymentMethod}\n          onChange={(value) => {\n            onDataChange({\n              ...data,\n              paymentMethod: value,\n            })\n          }}\n        />\n        <CustomButton\n          className={styles['CustomButton']}\n          title={data.loading ? \"Обработка ...\" : \"Оплатить\"}\n          onClick={onClick}\n          disabled={!data.canPay}\n        />\n        <p className=\"CalculatorOffer\">\n          {\"Оформляя покупку, вы соглашаетесь с \"}\n          <a className=\"CalculatorLink\" href={config.privacyUrl} target='_blanc'>Договором оферты</a>\n        </p>\n      </div>\n    </div >\n  );\n}\n\nexport default Calculator;\n","import { useEffect, useState } from \"react\";\nimport config from \"../config/config\";\n\nexport const useFetch = (url: string) => {\n  const [isLoading, setIsLoading] = useState(false)\n  const [response, setResponse] = useState<any>()\n\n  useEffect(() => {\n    setIsLoading(true)\n    fetch(`${config.apiUrl}/${url}`)\n      .then(res => res.json())\n      .then((response) => {\n        setResponse(response.data)\n        setIsLoading(false)\n      })\n      .catch((err) => {\n        console.log('fetch err', err);\n        setIsLoading(false)\n      })\n  }, [])\n\n  return {\n    isLoading,\n    response\n  }\n}","import React, { useCallback, useState } from \"react\";\nimport styles from \"./IntegerSelector.module.css\";\n\ninterface IProps {\n  className?: string;\n  value?: number;\n  onChange?: (newValue: number) => void;\n}\n\nconst IntegerSelector: React.FC<IProps> = ({ className = \"\", onChange = () => {} }) => {\n  const [value, setValue] = useState<number>(3);\n  const [canIncrease, setCanIncrease] = useState(checkCanIncrease(value));\n  const [canDecrease, setCanDecrease] = useState(checkCanDecrease(value));\n\n  const updateCans = useCallback((newValue: number) => {\n    setCanIncrease(checkCanIncrease(newValue));\n    setCanDecrease(checkCanDecrease(newValue));\n  }, []);\n\n  const handleIncreaseClick = useCallback(() => {\n    if (canIncrease) {\n      const newValue = value + 1;\n      updateCans(newValue);\n      setValue(newValue);\n      onChange(newValue);\n    }\n  }, [canIncrease, value, updateCans, onChange]);\n\n  const handleDecreaseClick = useCallback(() => {\n    if (canDecrease) {\n      const newValue = value - 1;\n      updateCans(newValue);\n      setValue(newValue);\n      onChange(newValue);\n    }\n  }, [canDecrease, value, updateCans, onChange]);\n\n  const handleInputBlur = useCallback(\n    (event: React.ChangeEvent<HTMLInputElement>) => {\n      if (value >= 3) {\n        setValue(value);\n        onChange(value);\n        updateCans(value);\n      } else {\n        setValue(3);\n        onChange(3);\n        updateCans(3);\n      }\n    },\n    [onChange, value, updateCans],\n  );\n\n  const handleInputChange = useCallback(\n    (event: React.ChangeEvent<HTMLInputElement>) => {\n      if (event.target.value === '') {\n        return setValue(0)\n      }\n      const newValue = Number.parseInt(event.target.value);\n      if (!Number.isNaN(newValue) && newValue >= 1) {\n        setValue(newValue);\n      }\n    },\n    [],\n  );\n\n  return (\n    <div className={`${styles.Root} ${className}`}>\n      <div\n        className={`${styles.IconContainer} ${styles.LeftIcon} ${canDecrease ? \"\" : styles.Disabled}`}\n        onClick={handleDecreaseClick}\n      >\n        -\n      </div>\n      <div className={styles.InputContainer}>\n        <input className={styles.Input} type=\"number\" value={value || ''} onChange={handleInputChange} onBlur={handleInputBlur} />\n      </div>\n      <div\n        className={`${styles.IconContainer} ${styles.RightIcon} ${canIncrease ? \"\" : styles.Disabled}`}\n        onClick={handleIncreaseClick}\n      >\n        +\n      </div>\n    </div>\n  )\n}\n\nfunction checkCanIncrease(value: number): boolean {\n  return true;\n}\n\nfunction checkCanDecrease(value: number): boolean {\n  return value > 3;\n}\n\nexport default IntegerSelector;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { ICalculator } from '../../types/ICalculator';\nimport './Selector.css';\nimport IntegerSelector from \"../IntegerSelector/IntegerSelector\";\n\nconst monthPrice = 379;\nconst selectorIcon = \"images/Selector.png\";\n\nexport interface ISelectorProps {\n  getPrice: (data: ICalculator) => void;\n  showCountSelector?: boolean;\n  useCorporateDiscount?: boolean;\n  promoCalculator?: boolean;\n  useAvoDiscount?: boolean;\n}\n\ninterface IDates {\n  [key: string]: string;\n}\n\nconst dates: IDates = {\n  \"1\": \"1 месяц\",\n  \"3\": \"3 месяца\",\n  \"6\": \"6 месяцев\",\n  \"12\": \"12 месяцев\",\n};\n\nconst Selector: React.FC<ISelectorProps> = ({ getPrice, showCountSelector, useCorporateDiscount, promoCalculator, useAvoDiscount }) => {\n\n  const [count, setCount] = useState(3);\n  const [value, setValue] = useState(!promoCalculator ? 12 : 6);\n  const [price, setPrice] = useState(monthPrice * (!promoCalculator ? 12 : 6));\n  const [discount, setDiscount] = useState(!promoCalculator ? 52 : 40);\n  const [corporateDiscount, setCorporateDiscount] = useState(40);\n\n  useEffect(() => {\n    let benefit = Math.round(price * discount / 100);\n\n    if (useCorporateDiscount) {\n      if (discount === 0) {\n        benefit = 0;\n      } else {\n        const preciseBenefit = price * (1 - (1 - discount / 100) * (1 - corporateDiscount / 100));\n        benefit = Math.ceil(preciseBenefit);\n      }\n    }\n\n    if (useAvoDiscount) {\n      benefit = benefit + Math.ceil((price - benefit) * 0.55);\n    }\n\n    getPrice(\n      {\n        count,\n        newPrice: price,\n        discount,\n        corporateDiscount,\n        benefit,\n        month: value\n      }\n    )\n  }, [value, count]);\n\n  const handleMonthsChange = useCallback(\n    (event: React.ChangeEvent<HTMLSelectElement>) => {\n      setPrice(parseInt(event.target.value) * monthPrice);\n      setValue(parseInt(event.target.value));\n      if (parseInt(event.target.value) === 12) {\n        setDiscount(52);\n        setCorporateDiscount(40);\n      } else if (parseInt(event.target.value) === 6) {\n        setDiscount(useCorporateDiscount ? 40 : 54);\n        setCorporateDiscount(40);\n      } else if (parseInt(event.target.value) === 3) {\n        setDiscount(30);\n        setCorporateDiscount(0);\n      } else {\n        setDiscount(0);\n        setCorporateDiscount(0);\n      }\n    },\n    [setValue, setDiscount, useCorporateDiscount],\n  );\n\n  const handleCountChange = useCallback((newValue: number) => {\n    \n    if (newValue >= 3) {\n      setCount(newValue);\n    }\n  }, [])\n\n  return (\n    <div>\n      {showCountSelector && <IntegerSelector className=\"IntegerSelector\" onChange={handleCountChange} />}\n      <div className=\"Selector\">\n        <div>\n          <select onChange={handleMonthsChange} className=\"InputDate\" defaultValue={12} disabled={useAvoDiscount}>\n            {!useCorporateDiscount && ( // it's a bad way to write something like this, but no time for refactoring\n              <option value={1}>1 месяц</option>\n            )}\n            {!useCorporateDiscount && ( // it's a bad way to write something like this, but no time for refactoring\n              <option value={3}>3 месяца</option>\n            )}\n            <option value={6}>6 месяцев</option>\n            <option value={12}>12 месяцев</option>\n          </select>\n          {dates[value.toString()]}\n          <img className=\"SelectorImage\" src={selectorIcon} />\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default Selector;\n","import axios from \"axios\";\n\nexport interface IResponse {\n  httpStatus: number;\n  responseStatus: number | null;\n  success: boolean;\n  timestamp: string | null;\n  data: any | null;\n  error: string | null;\n  message: string | null;\n}\n\nexport type TQueryData = Record<string, unknown>;\n\nexport type THeaders = Record<string, string | number>;\n\nexport interface IRequestSettings {\n  headers?: THeaders;\n  retryCount?: number;\n  timeout?: number;\n  encoding?: string;\n}\n\nclass HttpService {\n  get(url: string, queryData: TQueryData = {}, settings: IRequestSettings = {}): Promise<IResponse> {\n    const urlWithQuery = this.addQueryParams(url, queryData);\n    return request({\n      method: \"GET\",\n      url: urlWithQuery,\n      ...settings,\n    });\n  }\n\n  post(url: string, data: unknown = {}, settings: IRequestSettings = {}): Promise<IResponse> {\n    return request({\n      url,\n      data,\n      method: \"POST\",\n      ...settings,\n    });\n  }\n\n  delete(url: string, settings: IRequestSettings = {}): Promise<IResponse> {\n    return request({\n      url,\n      method: \"DELETE\",\n      ...settings,\n    });\n  }\n\n  put(url: string, data: unknown = {}, settings: IRequestSettings = {}): Promise<IResponse> {\n    return request({\n      url,\n      data,\n      method: \"PUT\",\n      ...settings,\n    });\n  }\n\n  patch(url: string, data: unknown = {}, settings: IRequestSettings = {}): Promise<IResponse> {\n    return request({\n      url,\n      data,\n      method: \"PATCH\",\n      ...settings,\n    });\n  }\n\n  addQueryParams(url: string, params: TQueryData) {\n    let resultUrl = url;\n    let isFirst = true;\n    for (const key in params) {\n      const prefix = isFirst ? \"?\" : \"&\";\n      resultUrl += `${prefix}${key}=${params[key]}`;\n      isFirst = false;\n    }\n    return resultUrl;\n  }\n}\n\ninterface IRequestParams {\n  method: \"GET\" | \"POST\" | \"DELETE\" | \"PATCH\" | \"PUT\";\n  url: string;\n  data?: unknown;\n  headers?: THeaders;\n  retryCount?: number;\n  timeout?: number;\n}\n\nasync function request({ data, method, timeout, url, headers = {} }: IRequestParams): Promise<IResponse> {\n  try {\n    const axiosResponse = await axios.request({\n      method,\n      url,\n      headers,\n      timeout,\n      data: prepareData(data),\n      transformRequest: (requestData, requestHeaders) => {\n        setHeaderContentType(requestHeaders);\n        return requestData;\n      },\n    });\n\n    const serverData = axiosResponse.data;\n    return makeResponse({\n      httpStatus: axiosResponse.status,\n      responseStatus: serverData.statusCode,\n      success: serverData.success,\n      timestamp: serverData.timestamp,\n      data: serverData.data ?? null,\n      message: serverData.message ?? null,\n      error: serverData.error ?? null,\n    });\n  } catch (e) {\n    const serverData = e?.response?.data ?? {};\n    return makeResponse({\n      httpStatus: e?.response?.status ?? 0,\n      responseStatus: serverData.statusCode ?? null,\n      success: false,\n      data: serverData.data ?? null,\n      error: serverData.error ?? null,\n      message: serverData.message ?? null,\n    });\n  }\n}\n\nfunction makeResponse(params: Partial<IResponse>): IResponse {\n  return {\n    httpStatus: params.httpStatus ?? 0,\n    responseStatus: params.responseStatus ?? null,\n    success: params.success ?? false,\n    data: params.data ?? null,\n    timestamp: params.timestamp ?? null,\n    error: params.error ?? null,\n    message: params.message ?? null,\n  };\n}\n\nfunction setHeaderContentType(headers: THeaders) {\n  if (!headers[\"Content-Type\"]) {\n    headers[\"Content-Type\"] = \"application/json; charset=utf-8\";\n  }\n}\n\nfunction prepareData(data: unknown) {\n  if (data instanceof FormData) {\n    return data;\n  }\n\n  if (typeof data == \"object\" && data != null) {\n    return JSON.stringify(data);\n  }\n\n  return data;\n}\n\nconst httpService = new HttpService();\nexport default httpService;\n","import config from \"../config/config\";\nimport httpService, {IResponse} from \"../http/HttpService\";\n\nconst PROMO_CODES_CODE_URL = `${config.apiUrl}/promocode-certificates`;\n\ninterface IActivatePromocode {\n  promocode: string;\n}\n\nclass ActivatePromoCodeCodeApi {\n  activate(data: IActivatePromocode): Promise<IResponse> {\n    return httpService.get(`${PROMO_CODES_CODE_URL}/verification?promocode=${data.promocode}`, undefined, {headers: {\"Content-type\": \"application/pdf\"}, encoding: \"binary\",});\n  }\n}\n\nexport default ActivatePromoCodeCodeApi;\n\n","import ActivatePromoCodeCodeApi from \"./api\";\n\nconst ACTIVATE_ERRORS: Record<number, string> = {\n  1013: \"Промокод уже активирован\",\n  1014: \"Промокод не найден\",\n  1015: \"Промокод не оплачен\",\n  1016: \"Некорректные символы в промокоде\",\n  1017: \"Вы уже активировали этот промокод\",\n};\n\ninterface IActivateResult {\n  success: boolean;\n  data: any;\n  errorMessage?: string;\n}\n\nclass ActivateCodePromocodeController {\n  private api = new ActivatePromoCodeCodeApi();\n\n  async activateCodePromocode(promocode: string): Promise<IActivateResult> {\n    const response = await this.api.activate({\n      promocode\n    });\n\n    return {\n      success: response.success,\n      data: response.data,\n      errorMessage: ACTIVATE_ERRORS[response.responseStatus!] ?? undefined,\n    };\n  }\n}\n\nexport default ActivateCodePromocodeController;\n","import React, { useCallback, useState } from 'react';\nimport CustomButton from '../CustomButton/CustomButton';\nimport Selector from '../Selector/Selector';\nimport './PromoCalculator.css';\nimport { IMainScreenState } from \"../../types/IMainScreenState\";\nimport PhoneInput from 'react-phone-input-2';\nimport CustomInput from '../CustomInput/CustomInput';\nimport ActivateCodePromocodeController from '../../core/activateCodePromocode/controller';\nimport config from '../../core/config/config';\n\nexport interface ICalculatorProps {\n  data: IMainScreenState;\n  onClick?: () => void;\n  onDataChange?: (state: IMainScreenState) => void;\n  promoCalculator: boolean;\n}\n\nconst PromoCalculator: React.FC<ICalculatorProps> = ({ data, onClick, onDataChange = () => { }, promoCalculator }) => {\n  const [price, setPrice] = useState(\n    {\n      newPrice: 379,\n      discount: 34,\n      benefit: 0,\n      month: 12,\n    }\n  );\n  const controller = new ActivateCodePromocodeController();\n  const [promocodeDiscount, setPromocodeDiscount] = useState(1);\n  const [phone, setPhone] = useState(\"\");\n  const [phoneFlag, setPhoneFlag] = useState(false);\n  const [code, setCode] = useState(false);\n  const [codeData, setCodeData] = useState(\"\");\n  const [error, setError] = useState(false);\n  const [codeReq, setCodeReq] = useState(true);\n  const dayDiscount = (price.newPrice / price.month) - ((price.newPrice / price.month) * (price.discount / 100));\n  const dayDiscountWithPromocode = (code && !error) ? (dayDiscount * (promocodeDiscount / 100)) : 0;\n\n\n  const getPrice = useCallback((priceInfo) => {\n    setPrice(priceInfo);\n    onDataChange({\n      ...data,\n      months: priceInfo.month,\n      price: Math.floor((priceInfo.newPrice - priceInfo.benefit - ((code && !error) ? (((priceInfo.newPrice - priceInfo.benefit) * promocodeDiscount) / 100) : 0))),\n      discount: priceInfo.discount,\n    });\n  }, [data, onDataChange, setPrice]);\n\n  const handleCodeChange = useCallback(\n    (event: React.ChangeEvent<HTMLInputElement>) => {\n      const text = event.target.value.replace(/\\W/g, '').toUpperCase();\n      setCodeData(text);\n      if(text.length > 3) {\n        setCodeReq(false);\n      } else {\n        setCodeReq(true);\n      }\n  }, [setCodeData, codeData])\n\n  const handlePhone = useCallback(\n    (phone: string) => {\n      setPhone(phone);\n      onDataChange({\n        ...data,\n        phone,\n      })\n      if (phone.length >= 4 && phone.length <= 20) {\n        setPhoneFlag(true);\n      } else {\n        setPhoneFlag(false);\n      }\n  }, [setPhone, setPhoneFlag, data, onDataChange])\n\n  const onClickCode = useCallback(async () => {\n    const activateResult = await controller.activateCodePromocode(codeData);\n    if (activateResult.success) {\n      setCode(true);\n      setError(false);\n      setPromocodeDiscount(activateResult.data.discount);\n      const sumBenefit = price.newPrice - price.benefit;\n      onDataChange({\n        ...data,\n        price: Math.floor((sumBenefit - ((sumBenefit * activateResult.data.discount) / 100) )),\n      });\n      return;\n    } else {\n      const sumBenefit = price.newPrice - price.benefit;\n      setError(true);\n      setCode(false);\n      setPromocodeDiscount(1);\n      onDataChange({\n        ...data,\n        price: Math.floor(sumBenefit),\n      });\n    }\n  }, [setCode, codeData, onDataChange, setPromocodeDiscount, promocodeDiscount])\n\n  const onClickResetCode = useCallback(() => {\n    setCodeData('');\n    const sumBenefit = price.newPrice - price.benefit;\n    setPromocodeDiscount(1);\n      onDataChange({\n        ...data,\n        price: Math.floor(sumBenefit),\n      });\n    setCodeReq(true);\n    setCode(false);\n  }, [setCode])\n\n  return (\n    <div className=\"CalculatorBlock\">\n      <div>\n        <p className=\"CalculatorTitle\">Оформить подписку</p>\n        <div className=\"CalculatorPhoneInput\">\n          <PhoneInput country={'ru'} value={phone} inputProps={{required: true, autoFocus: true}} onChange={handlePhone} specialLabel=\"\" />\n        </div>\n        <p className=\"CalculatorAdditionalText\">На этот номер телефона будет оформлена подписка</p>\n        <div className=\"CalculatorBottomBlock\">\n          <div className=\"CalculatorBottomLeftBlock\">\n            <p className=\"CalculatorTextFirst\">Месяцев</p>\n            <p className=\"CalculatorText\">Цена</p>\n            {price.month !== 1 && <p className=\"CalculatorText\">Скидка за период</p>}\n            {code && <p className=\"CalculatorText\">Скидка по коду</p>}\n            {<p className=\"CalculatorTextSum\">Итого к оплате</p>}\n            {price.month !== 1 && <p className=\"CalculatorTextGray\">Цена за 1 месяц</p>}\n          </div>\n          <div className=\"CalculatorBottomRightBlock\">\n            <Selector getPrice={getPrice} promoCalculator={promoCalculator} />\n            <div className=\"CalculatorBottomRightBlockText\">\n              <p className=\"CalculatorText\">{(price.newPrice).toLocaleString('ru-RU') || 0} <span className=\"RubleIcon\">₽</span></p>\n              {price.month !== 1 && <p className=\"CalculatorText\">-{price.discount}%</p>}\n              {code && <p className=\"CalculatorText\">-{promocodeDiscount}%</p>}\n              {<p className=\"CalculatorTextSum\">{(price.newPrice - price.benefit - ((code && !error) ? (((price.newPrice - price.benefit) * promocodeDiscount) / 100) : 0)).toLocaleString('ru-RU') || 0} <span className=\"RubleIcon\">₽</span></p>}\n              {price.month !== 1 && <p className=\"CalculatorTextGray\">{((price.newPrice / price.month) - ((price.newPrice / price.month) * (price.discount / 100)) - dayDiscountWithPromocode).toLocaleString('ru-RU') || 0} <span className=\"RubleIconGray\">₽</span></p>}\n            </div>\n          </div>\n        </div>\n       \n      </div>\n      <div className=\"CalculatorFooter\">\n        <div className=\"CalculatorDiscountContainer\">\n          <div className=\"CalculatorDiscountBlock\">\n            {!code && <CustomInput placeholder=\"У меня есть код на скидку\" onChange={(value) => handleCodeChange(value)} inputClassName=\"CalculatorDiscountInput\" minLength={4} maxLength={20} />}\n            {code && !error && <p className=\"CalculatorCodeText\">Ваш код успешно применен</p>}\n            {!code && <CustomButton title=\"Применить\" onClick={onClickCode} className=\"CalculatorDiscountButton\" disabled={codeReq} />}\n          </div>\n          {code && <div className=\"CalculatorErrorBlock\">\n             <CustomButton title=\"Отменить\" onClick={onClickResetCode} className=\"CalculatorDiscountButton\" />\n          </div>}\n        </div>\n        {error && <div className=\"CalculatorErrorBlock\">\n           <p className=\"CalculatorCodeTextError\">Указанный код на скидку не найден или не действителен</p>\n        </div>}\n        \n        <CustomButton title=\"Перейти к оплате\" onClick={onClick} disabled={!phoneFlag} />\n        <p className=\"CalculatorOffer\">\n          {\"Оформляя покупку, вы соглашаетесь с \"}\n          <a className=\"CalculatorLink\" href={config.privacyUrl} target='_blanc'>Договором оферты</a>\n        </p>\n      </div>\n    </div>\n  );\n}\n\nexport default PromoCalculator;\nfunction setError(arg0: any) {\n  throw new Error('Function not implemented.');\n}\n\n","import React, { } from 'react';\nimport Calculator from '../Calculator/Calculator';\nimport { IMainScreenState } from \"../../types/IMainScreenState\";\nimport PromoCalculator from '../PromoCalculator/PromoCalculator';\nimport { useHolidaysTheme } from '../../themes/useTheme';\nimport { useTimer } from '../../themes/useTimer';\nconst birthdayIcon = \"images/BirthdayIcon.png\";\nconst giftBox = \"images/GiftBox.png\";\n\ninterface IProps {\n  promoCalculator?: boolean;\n  data: IMainScreenState;\n  onBuyClick: () => void;\n  onDataChange: (newState: IMainScreenState) => void;\n}\n\nconst UpperMainBlock: React.FC<IProps> = ({ data, onBuyClick, onDataChange, promoCalculator }) => {\n  const { currentDayNumber, daysLeft, themeText, styles, isHoliday, isPink, isBirthday, isBlackFriday, nextTimeout } = useHolidaysTheme()\n  // console.log('isHoliday', isHoliday)\n  useTimer(isHoliday, nextTimeout)\n  // console.log('nextTimeout', nextTimeout)\n  const createMarkup = (text: string, margin?: number) => {\n    if (!text) return ''\n    return text.split('\\n').map((str, key) => <p key={key} style={{ margin: margin || 0 }}>{str}</p>)\n  }\n\n  return (\n    <div className={styles.UpperMainRoot}>\n      {isBirthday ?\n        <img className=\"AppIcon\" src={birthdayIcon} /> :\n        <div className={styles.ProstoAppIcon}></div>\n      }\n      {(isHoliday && nextTimeout) &&\n        <div className={styles.Timer} style={{ textAlign: 'center' }}>\n          <div className={styles.TimerText}>\n            До конца {isPink && daysLeft > 0 ? currentDayNumber + ' дня' : ''} акции осталось:\n          </div>\n          <div style={{ height: 100 }} id=\"timercec83824777491b4b59b1d363b66b0190\"></div>\n        </div>\n      }\n      <div className={styles.BackgroundImageContainer}>\n        <div className={styles.BackgroundImage} />\n      </div>\n      <div className={styles.MainBlock}>\n        <div className={styles.LeftTextContainer} />\n        <div className={styles.MainContainer}>\n          {promoCalculator\n            ? <PromoCalculator data={data} onClick={onBuyClick} onDataChange={onDataChange} promoCalculator={promoCalculator} />\n            : <Calculator\n              title={themeText.calcTitle}\n              subtitle={themeText.calcSubtitle}\n              data={data}\n              onClick={onBuyClick}\n              onDataChange={onDataChange}\n            />}\n        </div>\n        <a className={styles.HowItWorks} href=\"#advices\">Как это работает?</a>\n        <div className={styles.TextContainer}>\n          <div className={styles.MainTitle}>{createMarkup(themeText.title, 15)}</div>\n          <div className={styles.MainSubtitle || styles.AdditionalText}>{createMarkup(themeText.subtitle, 15)}</div>\n          <div className={styles.AdditionalText}>{createMarkup(themeText.subtitleExtra, 15)}</div>\n        </div>\n\n        {isBlackFriday && <div className={styles.WavesBackground} />}\n        {isBlackFriday &&\n          <p className={styles.MobileTitle}>\n            {createMarkup(themeText.calcTitle)}\n            <p className=\"CalculatorSubitle\">{themeText.calcSubtitle}</p>\n            <img src={giftBox} width={'100%'} />\n          </p>\n        }\n      </div>\n    </div>\n  );\n}\n\nexport default UpperMainBlock;\n","import moment from \"moment\";\nimport { useLayoutEffect } from \"react\";\n\nexport const useTimer = (show: boolean, tillDate?: number) => {\n  // console.log('tillDate', tillDate)\n\n  // from https://megatimer.ru\n\n  useLayoutEffect(() => {\n    if (!show) return\n    var _id = \"cec83824777491b4b59b1d363b66b0190\";\n    new window.MegaTimer(\n      _id, {\n        \"view\": [1, 1, 1, 1],\n      \"type\": {\n        \"currentType\": \"1\",\n        \"params\": { \"usertime\": false, \"tz\": \"3\", \"utc\": tillDate }\n      },\n      \"design\": {\n        \"type\": \"plate\", \n        \"params\": {\n          \"round\": \"0\", \n          \"background\": \"opacity\", \n          \"effect\": \"slide\", \n          \"space\": \"0\", \n          \"separator-margin\": \"19\",\n          \"number-font-family\": { \n            \"family\": \"Comfortaa\", \"link\": \"<link href='//fonts.googleapis.com/css?family=Comfortaa&subset=latin,cyrillic' rel='stylesheet' type='text/css'>\" \n          },\n          \"number-font-size\": \"24\", \n          \"number-font-color\": \"#919191\", \n          \"padding\": \"6\", \n          \"separator-on\": true, \n          \"separator-text\": \":\", \n          \"text-on\": true,\n          \"text-font-family\": { \n            \"family\": \"Arial\" \n          }, \n          \"text-font-size\": \"12\", \n          \"text-font-color\": \"#999999\"\n        }\n      }, \n      \"designId\": 4, \n      \"theme\": \"white\", \n      \"width\": 630, \n      \"height\": 98\n    })\n  }, [show])\n  \n}","import { TPayMethod } from \"../../types/TPayMethod\";\nimport config from \"../config/config\";\nimport httpService from \"../http/HttpService\";\nimport { TPaymentMethod } from \"./controller\";\n\nconst PROMO_CODES_URL = `${config.apiUrl}/promocodes`;\n\ninterface ICreatePromoCodeRequest {\n  phone?: string;\n  email: string;\n  months: number;\n  amountTotal: number;\n  price: number;\n  isCorporate: boolean;\n  method: TPayMethod;\n  text?: string;\n  discount?: number;\n  discountCorporation?: number;\n  companyName?: string,\n  inn?: string,\n  workPhone?: string,\n  legalAddress?: string,\n  paymentMethod?: TPaymentMethod,\n  isForever?: boolean\n}\n\ninterface ICreatePromoCodeResponse {\n  id: number;\n  text: string;\n  amountTotal: number;\n  amountLeft: number;\n  months: number;\n  price: number;\n  phone: string;\n  email: string;\n  method: string;\n  isCorporate: boolean;\n  creationDate: string;\n  paymentDate: string;\n  link?: string;\n}\n\nclass BuyGiftSubscriptionApi {\n  async createPromoCode(data: ICreatePromoCodeRequest): Promise<ICreatePromoCodeResponse | null> {\n    const response = await httpService.post(`${PROMO_CODES_URL}/buy`, data);\n    return response.success ? response.data as ICreatePromoCodeResponse : null;\n  }\n}\n\nexport default BuyGiftSubscriptionApi;\n","import BuyGiftSubscriptionApi from \"./api\";\nimport config from \"../config/config\";\nimport \"./TinkoffFrameFix.css\";\n\ninterface IPromoCode {\n  id: number;\n  text: string;\n  price: number;\n  amountTotal: number;\n  paymentLink?: string;\n}\n\nexport type TPaymentMethod = 'tinkoff' | 'stripe'\n\nclass BuyGiftSubscriptionController {\n  private api = new BuyGiftSubscriptionApi();\n\n  async buyPromoCode(email: string, months: number, price: number, discount: number, paymentMethod: TPaymentMethod, isForever?: boolean): Promise<IPromoCode | false> {\n    const promoCode = await this.createPromoCode(email, months, price, discount, paymentMethod, isForever);\n    if (!promoCode) {\n      return false\n    }\n    // if (!await this.requestUserPayment(email, promoCode, months)) {\n    //   return false;\n    // }\n\n    return promoCode;\n  }\n\n  private async createPromoCode(email: string, months: number, price: number, discount: number, paymentMethod?: TPaymentMethod, isForever?: boolean): Promise<IPromoCode | null> {\n    const response = await this.api.createPromoCode({\n      isCorporate: false,\n      method: \"card\",\n      amountTotal: 1,\n      email,\n      months,\n      price,\n      discount,\n      paymentMethod,\n      isForever\n    })\n\n    if (!response) {\n      return null;\n    }\n\n    return {\n      id: response.id,\n      text: response.text,\n      price: response.price,\n      amountTotal: response.amountTotal,\n      paymentLink: response.link,\n    }\n  }\n\n  private async requestUserPayment(email: string, promoCode: IPromoCode, months: number): Promise<boolean> {\n    const form = this.createTinkoffForm({\n      totalPrice: promoCode.amountTotal * promoCode.price,\n      orderId: promoCode.id,\n      description: `Подписка на ${months} месяцев для ${email}`,\n      email\n    })\n    window.pay(form);\n    return true;\n  }\n\n  private createTinkoffForm(params: {\n    totalPrice: number,\n    orderId: number,\n    description: string,\n    email: string,\n  }) {\n    const receiptData =\n    {\n      Email: params.email,\n      EmailCompany: \"help@prostoapp.com\",\n      Taxation: \"usn_income\",\n      Items: [{\n        Name: \"Cертификат на подписку на приложение Prosto\",\n        Price: params.totalPrice * 100,\n        Quantity: 1.00,\n        Amount: params.totalPrice * 100,\n        Tax: \"none\",\n      }],\n    }\n\n    const form = document.createElement(\"form\");\n\n    const fields = document.createDocumentFragment();\n    fields.appendChild(this.createInput(\"terminalkey\", config.tinkoffTerminalKey));\n    fields.appendChild(this.createInput(\"frame\", \"true\"));\n    fields.appendChild(this.createInput(\"language\", \"ru\"));\n    fields.appendChild(this.createInput(\"amount\", params.totalPrice.toString()));\n    fields.appendChild(this.createInput(\"order\", params.orderId.toString()));\n    fields.appendChild(this.createInput(\"description\", params.description));\n    fields.appendChild(this.createInput(\"email\", params.email));\n    fields.appendChild(this.createInput(\"receipt\", JSON.stringify(receiptData)));\n\n\n    form.appendChild(fields);\n\n    return form;\n  }\n\n  private createInput(name: string, value: string) {\n    const input = document.createElement(\"input\");\n    input.type = \"hidden\";\n    input.name = name;\n    input.value = value;\n    return input;\n  }\n}\n\nexport default BuyGiftSubscriptionController\n","import React, { useCallback, useEffect, useState } from 'react';\nimport BottomMainBlock from '../../components/BottomMainBlock/BottomMainBlock';\nimport Footer from '../../components/Footer/Footer';\nimport UpperMainBlock from '../../components/UpperMainBlock/UpperMainBlock';\nimport BuyGiftSubscriptionController from \"../../core/buyGiftSubscription/controller\";\nimport { IMainScreenState } from \"../../types/IMainScreenState\";\nimport config from '../../core/config/config';\nimport domainRouter from \"../../navigation/domainRouter\";\nimport debounce from \"lodash.debounce\";\nimport { useHolidaysTheme } from '../../themes/useTheme';\nimport ym from 'react-yandex-metrika';\n\nconst controller = new BuyGiftSubscriptionController();\nconst MainScreen: React.FC = () => {\n  console.log('podarok')\n  const { isBlackFriday} = useHolidaysTheme()\n\n  const [screenState, setScreenState] = useState<IMainScreenState>({\n    email: \"\",\n    confirmEmail: false,\n    promocodeId: null,\n    text: \"\",\n    months: 0,\n    price: 0,\n    phone: \"\",\n    discount: 0,\n    canPay: false,\n    paymentMethod: 'tinkoff',\n  });\n\n  const handleDataChange = useCallback((newState: IMainScreenState) => {\n    setScreenState({\n      ...newState,\n      canPay: isValidEmail(newState.email) && newState.confirmEmail,\n    });\n  }, []);\n\n  const handleBuyClick = useCallback(debounce(async () => {\n    // ym('reachGoal', 'oplatit');\n    window.generalPixel.postClick('a2');\n    const { email, months, price, discount, paymentMethod } = screenState\n    const promocode = await controller.buyPromoCode(email, months, price, discount, paymentMethod);\n\n    setScreenState({ ...screenState, loading: true })\n\n    if (!promocode) {\n      setScreenState({ ...screenState, loading: false })\n      alert(\"Не получилось. Попробуйте ещё раз.\");\n      return;\n    }\n\n    if (promocode.paymentLink) {\n      window.location.href = promocode.paymentLink\n    } else {\n      setScreenState({ ...screenState, loading: false })\n      alert(\"Не получилось сгенерировать форму для оплаты! Попробуйте ещё раз.\");\n    }\n\n  }, 2000, { leading: true, trailing: false }), [screenState])\n\n  const handleActivateClick = useCallback(() => {\n    domainRouter.go(config.codeRoute);\n  }, []);\n\n  // useEffect(() => {\n  //   window.location.replace(\"https://wow.prostoapp.ru\");\n  // }, [])\n\n  return (\n    <>\n      <UpperMainBlock\n        data={screenState}\n        onDataChange={handleDataChange}\n        onBuyClick={handleBuyClick}\n      />\n      <BottomMainBlock\n        onActivateClick={handleActivateClick}\n      />\n      <Footer backgroundColor={isBlackFriday ? '#EFECEC' : '#fff'} />\n    </>\n  );\n}\n\nexport function isValidEmail(value: string): boolean {\n  const EMAIL_REG = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n  return EMAIL_REG.test(value);\n}\n\nexport const createMarkup = (text?: string) => {\n  if (!text) return ''\n  return text.split('\\n').map((str, key) => <p key={key} style={{ margin: 0 }}>{str}</p>)\n}\n\nexport default MainScreen;\n","import React, { useCallback, useState } from 'react';\n\ntype CertificateSheetProps = {\n  partner?: string | null\n}\n\nconst PARTNERS: any = {\n  'empty': {},\n  'fitstars': {\n    name: 'Fitstars',\n    color: '#FD2BE6',\n    present: \"images/partners/fitstars-present.png\",\n    logo: \"images/partners/fitstars.png\",\n    title: '№1 фитнес-платформа для домашних тренировок в России',\n    gift: 'Месяц тренировок без оплаты',\n    code: 'PROSTOAPP',\n    instructionsLink: 'http://wow.prostoapp.ru/fitstars',\n    info: \"images/partners/fitstars-info.png\",\n  },\n  'yasno': {\n    name: 'Ясно',\n    color: '#42B2FC',\n    present: \"images/partners/yasno-present.png\",\n    logo: \"images/partners/yasno.png\",\n    title: 'сервис подбора и консультаций с психологом онлайн',\n    gift: 'Скидка 20% на первые 3 консультации',\n    code: 'YASNO',\n    instructionsLink: 'http://wow.prostoapp.ru/yasno',\n    info: \"images/partners/yasno-info.png\",\n  },\n  'synchro': {\n    name: 'Синхронизация',\n    color: '#A67CB6',\n    present: \"images/partners/synchro-present.png\",\n    logo: \"images/partners/synchro.png\",\n    title: `это онлайн-лекторий с курсами, которые вдохновляют. \nВырвитесь из рутины и найдите новые \nтемы для общения с близкими, подарив\nсебе интересный и развивающий досуг \nна полгода вперед`,\n    gift: 'Скидка 30% на 6 месяцев подписки',\n    code: 'ПРОСТО',\n    instructionsLink: 'http://wow.prostoapp.ru/synchronize',\n    info: \"images/partners/synchro-info.png\",\n  },\n  'sekta': {\n    name: '#Sekta',\n    color: '#3ED8C4',\n    present: \"images/partners/sekta-present.png\",\n    logo: \"images/partners/sekta.png\",\n    title: `онлайн-школа фитнеса с научным подходом `,\n    gift: 'Скидка 10% при оплате любого комплексного курса',\n    code: 'PROSTO',\n    instructionsLink: 'http://wow.prostoapp.ru/sektaschool',\n    info: \"images/partners/sekta-info.png\",\n  },\n  'studio': {\n    name: 'Prosto Studio',\n    color: '#5C84B2',\n    present: \"images/partners/studio-present.png\",\n    logo: \"images/partners/studio.png\",\n    title: `телесные практики для управления эмоциональным состоянием.`,\n    gift: 'Доступ к 3 занятиям без оплаты',\n    code: 'PROSTO',\n    instructionsLink: 'https://t.me/+UWSImQtTFVs2ZDNi',\n    info: \"images/partners/studio-info.png\",\n  }\n}\n\nconst PartnerCertificate = ({ partner }: CertificateSheetProps) => {\n\n  const params = PARTNERS[partner || 'empty']\n\n  const [copiedToClipboard, setCopiedToClipboard] = useState(false)\n\n  const copyCodeToClipboard = useCallback(() => {\n    if (copiedToClipboard) {\n      return setCopiedToClipboard(false)\n    }\n    navigator.clipboard.writeText(params.code || '')\n    setCopiedToClipboard(true)\n  }, [params, copiedToClipboard])\n\n  return (\n    params?.name ?\n      <>\n        <div className='hideOnMobile' style={{\n          paddingTop: 64,\n          display: 'flex',\n          flexDirection: 'column',\n          fontFamily: 'Gotham Pro Regular',\n          fontSize: '16px',\n          lineHeight: '20px',\n        }}>\n          <div>\n            <img src={params.present} width=\"100\" height=\"72\" />\n          </div>\n\n          <p style={{\n            fontFamily: 'Gilroy Semibold',\n            fontSize: 32,\n            marginTop: 12,\n          }}>\n            Подарок от партнёра\n          </p>\n          <div style={{\n            width: 886,\n            alignSelf: 'center',\n            display: \"flex\",\n            flexDirection: 'row',\n            justifyContent: 'center',\n            background: '#F5F1EF',\n            borderRadius: 16,\n            padding: 32,\n            overflow: \"hidden\"\n          }}>\n            <div style={{ marginRight: 16 }}>\n              <img src={params.logo} width=\"auto\" height=\"60\" />\n            </div>\n            <div style={{\n              display: \"flex\",\n              flexDirection: 'column',\n              alignContent: 'flex-start',\n              paddingRight: 80\n            }}>\n              <p style={{ textAlign: 'left', marginTop: 6, }}>\n                <b style={{ color: params.color }}>{params.name}</b> - {params.title}\n              </p>\n              <p style={{\n                marginTop: 6,\n                textAlign: 'left',\n                fontFamily: 'Gilroy Semibold',\n                fontSize: 26,\n                lineHeight: '28px',\n                color: params.color,\n              }}>\n                {params.gift}\n              </p>\n              {partner === 'studio' ? <>\n                <div style={{ display: 'flex', flexDirection: \"column\", alignItems: 'flex-start' }}>\n                  <a href={params.instructionsLink}>\n                    <img src={'images/partners/studio-link.png'} width=\"274\" height=\"48\" />\n                  </a>\n                  <div style={{ display: 'flex', gap: 15, alignItems: 'center', marginTop: 15 }}>\n                    Состояние\n                    <img src={'images/partners/studio-arrow.png'} width=\"23\" height=\"15\" />\n                    Действие\n                    <img src={'images/partners/studio-arrow.png'} width=\"23\" height=\"15\" />\n                    Результат\n                  </div>\n                </div>\n              </> : <>\n                <div style={{\n                  display: 'flex',\n                  alignItems: 'center',\n                  fontFamily: 'Gilroy Semibold',\n                  fontSize: 20,\n                }}>\n                  Промокод\n                  <div style={{\n                    marginLeft: 16,\n                    width: 236,\n                    height: 38,\n                    background: copiedToClipboard ? \"#000\" : \"#fff\",\n                    borderRadius: 8,\n                    display: 'flex',\n                    alignItems: 'center',\n                    cursor: 'pointer'\n                  }}\n                    onClick={copyCodeToClipboard}\n                  >\n                    {copiedToClipboard ?\n                      <p style={{\n                        margin: '0 auto',\n                        padding: 0,\n                        color: \"#fff\",\n                        fontFamily: 'Gilroy Semibold',\n                        fontSize: 18,\n                      }}\n                      >\n                        {'Скопировано'}\n                      </p> :\n                      <>\n                        <p style={{\n                          margin: '0 auto',\n                          padding: 0,\n                          fontFamily: 'Gilroy Bold',\n                          fontSize: 22,\n                        }}\n                        >\n                          {params.code}\n                        </p>\n                        <img\n                          src=\"images/pink/copy.png\"\n                          width=\"24\"\n                          height=\"24\"\n                          style={{ marginRight: 16 }}\n                        />\n                      </>\n                    }\n                  </div>\n                </div>\n                <p style={{\n                  marginTop: 32,\n                  textAlign: 'left',\n                }}>Инструкция по промокоду —\n                  <a style={{\n                    color: params.color,\n                    marginLeft: 5\n                  }}\n                    href={params.instructionsLink}>по ссылке.</a>\n                </p>\n              </>\n              }\n\n            </div>\n            <div style={{\n              display: \"flex\",\n              flexDirection: 'column',\n              width: 355,\n            }}>\n              <img src={params.info} width=\"345\" height=\"auto\" />\n            </div>\n          </div>\n        </div >\n        <div className='hideOnDesktop' style={{\n          paddingTop: 64,\n          display: 'flex',\n          flexDirection: 'column',\n          fontFamily: 'Gotham Pro Regular',\n          fontSize: '16px',\n          lineHeight: '20px',\n        }}>\n\n          <div style={{\n            width: 343,\n            alignSelf: 'center',\n            background: '#F5F1EF',\n            borderRadius: 16,\n            overflow: \"hidden\"\n          }}>\n            <div style={{\n              display: \"flex\",\n              flexDirection: 'column',\n              alignItems: 'center',\n              padding: 16,\n              paddingTop: 32\n            }}>\n              <img src={params.present} width=\"100\" height=\"72\" />\n              <p style={{\n                fontFamily: 'Gilroy Semibold',\n                fontSize: 24,\n                lineHeight: '32px',\n                marginTop: 12,\n              }}>\n                Подарок <br />\n                от партнёра\n              </p>\n              <div style={{ display: 'flex' }}>\n                <div style={{ marginRight: 16 }}>\n                  <img src={params.logo} width=\"auto\" height=\"60\" />\n                </div>\n                <p style={{ textAlign: 'left', fontSize: 14, marginTop: 0, }}>\n                  <b style={{ color: params.color }}>{params.name}</b> - {params.title}\n                </p>\n              </div>\n              <p style={{\n                marginTop: 6,\n                textAlign: 'center',\n                fontFamily: 'Gilroy Semibold',\n                fontSize: 22,\n                lineHeight: '28px',\n                color: params.color,\n              }}>\n                {params.gift}\n              </p>\n              {partner === 'studio' ? <>\n                <div style={{ display: 'flex', flexDirection: \"column\", alignItems: 'center' }}>\n                  <a href={params.instructionsLink}>\n                    <img src={'images/partners/studio-link.png'} width=\"274\" height=\"48\" />\n                  </a>\n                  <div style={{ display: 'flex', gap: 10, alignItems: 'center', marginTop: 15, marginBottom: 25, fontSize: 14, }}>\n                    Состояние\n                    <img src={'images/partners/studio-arrow.png'} width=\"23\" height=\"15\" />\n                    Действие\n                    <img src={'images/partners/studio-arrow.png'} width=\"23\" height=\"15\" />\n                    Результат\n                  </div>\n                </div>\n              </> : <>\n                <div style={{\n                  display: 'flex',\n                  flexDirection: 'column',\n                  alignItems: 'center',\n                }}>\n                  <p style={{\n                    padding: 0,\n                    margin: 0,\n                    fontFamily: 'Gilroy Semibold',\n                    fontSize: 18,\n                    marginBottom: 15\n                  }}>Промокод</p>\n\n                  <div style={{\n                    marginLeft: 16,\n                    width: 236,\n                    height: 38,\n                    background: copiedToClipboard ? \"#000\" : \"#fff\",\n                    borderRadius: 8,\n                    display: 'flex',\n                    alignItems: 'center',\n                    cursor: 'pointer'\n                  }}\n                    onClick={copyCodeToClipboard}\n                  >\n                    {copiedToClipboard ?\n                      <p style={{\n                        margin: '0 auto',\n                        padding: 0,\n                        color: \"#fff\",\n                        fontFamily: 'Gilroy Semibold',\n                        fontSize: 18,\n                      }}\n                      >\n                        {'Скопировано'}\n                      </p> :\n                      <>\n                        <p style={{\n                          margin: '0 auto',\n                          padding: 0,\n                          fontFamily: 'Gilroy Bold',\n                          fontSize: 22,\n                        }}\n                        >\n                          {params.code}\n                        </p>\n                        <img\n                          src=\"images/pink/copy.png\"\n                          width=\"24\"\n                          height=\"24\"\n                          style={{ marginRight: 16 }}\n                        />\n                      </>\n                    }\n                  </div>\n                </div>\n                <p style={{\n                  marginTop: 32,\n                  textAlign: 'center',\n                  fontSize: 14,\n                  marginBottom: 30,\n                }}>Инструкция по промокоду — <br />\n                  <a style={{\n                    color: params.color,\n                    marginLeft: 5\n                  }}\n                    href={params.instructionsLink}>по ссылке.</a>\n                </p>\n              </>\n              }\n              <div style={{\n                display: \"flex\",\n                alignSelf: 'center',\n                flexDirection: 'column',\n              }}>\n                <img src={params.info} width=\"301\" height=\"auto\" />\n              </div>\n\n            </div>\n          </div>\n        </div >\n      </>\n      : <></>\n  );\n}\n\nexport default PartnerCertificate;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport PartnerCertificate from './PartnerCertificate';\nimport config from '../../core/config/config';\n\ntype CertificateSheetProps = {\n  visible: boolean\n  code: string | null,\n  id: string | null,\n  isForever: string | null,\n  partner: string | null,\n}\n\nconst CertificateSheet = ({ code, id, isForever, partner }: CertificateSheetProps) => {\n  // console.log('visible', visible)\n  const [visible, setVisible] = useState(false)\n  const [copiedToClipboard, setCopiedToClipboard] = useState(false)\n\n  const copyCodeToClipboard = useCallback(() => {\n    if (copiedToClipboard) {\n      return setCopiedToClipboard(false)\n    }\n    navigator.clipboard.writeText(code || '')\n    setCopiedToClipboard(true)\n  }, [code, copiedToClipboard])\n\n  const downloadPdf = useCallback(() => {\n    if (id === null) return alert('Сертификат не валидный')\n    const PDF_DOWNLOAD_URL = `${config.apiUrl}/promocodes`;\n    window.location.href = `${PDF_DOWNLOAD_URL}/${id}/certificate?text=${code}`\n  }, [code, id])\n\n  useEffect(() => {\n    setVisible(true)\n  })\n\n  return (\n    <>\n      <div className='hideOnMobile' style={{\n        position: 'absolute',\n        top: 0,\n        opacity: visible ? 1 : 0,\n        zIndex: 1000,\n        transition: 'opacity ease 500ms',\n        alignSelf: \"center\",\n        width: '100%',\n        flexDirection: 'column',\n        backgroundColor: '#fff',\n        margin: '0 auto',\n        textAlign: 'center',\n        paddingBottom: 32,\n      }}>\n        <div style={{ padding: 30 }}>\n          <img src=\"https://icons.prostoapp.com/podarok/pink/icon.png\" width=\"60\" height=\"60\" />\n        </div>\n        <div style={{ zIndex: 2, width: 886, alignSelf: 'center' }}>\n          <img\n            src=\"images/pink/certificate-top-banner.png\"\n            width=\"886\"\n            height=\"340\"\n          />\n          {isForever === null ?\n            <></> :\n            <p style={{\n              position: \"absolute\",\n              marginLeft: 550,\n              marginTop: -150,\n              width: 245,\n              fontSize: '18px',\n              lineHeight: '28px',\n              textAlign: 'center',\n              color: '#EB7D8F'\n            }}>\n              Поздравляем с покупкой\n              доступа Prosto {isForever === 'true' ? 'Навсегда ' : 'на год '} <br />\n              со скидкой 72%!\n            </p>\n          }\n        </div>\n\n        <div style={{\n          marginTop: -170,\n          alignSelf: \"center\",\n          backgroundColor: '#FEE8EB',\n          width: 1104,\n          borderRadius: 16,\n          overflow: 'hidden',\n          paddingTop: 190,\n        }}>\n          <p className=\"TitleText\"\n            style={{\n              margin: '0 auto',\n              padding: 0,\n            }}\n          >\n            Подарочный сертификат\n          </p>\n          <div style={{\n            width: 414,\n            height: 56,\n            margin: '30px auto 10px auto',\n            background: copiedToClipboard ? \"#EB7D8F\" : \"#fff\",\n            borderRadius: 12,\n            display: 'flex',\n            alignItems: 'center',\n            cursor: 'pointer'\n          }}\n            onClick={copyCodeToClipboard}\n          >\n            {copiedToClipboard ?\n              <p style={{\n                margin: '0 auto',\n                padding: 0,\n                color: \"#fff\",\n                fontWeight: 'bold'\n              }}\n              >\n                {'Скопировано'}\n              </p> :\n              <>\n                <p className=\"TitleText\"\n                  style={{\n                    margin: '0 auto',\n                    padding: 0,\n                  }}\n                >\n                  {code || ''}\n                </p>\n                <img\n                  src=\"images/pink/copy.png\"\n                  width=\"24\"\n                  height=\"24\"\n                  style={{ marginRight: 16 }}\n                />\n              </>\n            }\n          </div>\n          <a style={{ textDecoration: 'none', color: '#000' }} href='https://code.prostoapp.ru'>\n            Активируйте на сайте <b>code.prostoapp.ru</b>\n          </a>\n          <div style={{\n            width: 196,\n            height: 30,\n            margin: '40px auto',\n            borderRadius: 8,\n            border: '1px solid #000',\n            display: 'flex',\n            justifyContent: 'center',\n            alignItems: 'center',\n            cursor: 'pointer'\n          }}\n            onClick={downloadPdf}\n          >\n            <img\n              src=\"images/pink/print.png\"\n              width=\"16\"\n              height=\"16\"\n            />\n            <p style={{ marginLeft: 8 }}>\n              {'Распечатать'}\n            </p>\n          </div>\n          {/* <div style={{\n            position: 'absolute',\n            marginTop: -288,\n          }}>\n            <img\n              src=\"images/pink/YuraYulia.png\"\n              width=\"306\"\n              height=\"288\"\n            />\n          </div> */}\n        </div>\n\n        <p style={{\n          fontFamily: 'Gilroy Semibold',\n          fontSize: 32,\n        }}>\n          Как пользоваться?\n        </p>\n        <div style={{\n          display: \"flex\",\n          flexDirection: 'row',\n          justifyContent: 'center'\n        }}>\n          <div style={{\n            display: \"flex\",\n            flexDirection: 'column',\n            alignContent: 'flex-start',\n            paddingRight: 80\n          }}>\n            <div style={{\n              display: \"flex\",\n              flexDirection: 'row',\n              marginTop: 20,\n            }}>\n              <img\n                src={\"images/pink/ticket.png\"}\n                width={50}\n                height={35}\n                style={{\n                  marginTop: 30,\n                  paddingRight: 30\n                }}\n              />\n              <p className=\"CertificateText\" style={{ textAlign: 'left', }}>\n                Зайдите на сайт <br />\n                <a style={{ color: '#EB7D8F' }}\n                  href='https://code.prostoapp.ru'> code.prostoapp.ru </a><br />\n                и активируйте промокод\n              </p>\n            </div>\n\n            <div style={{\n              display: \"flex\",\n              flexDirection: 'row',\n            }}>\n              <img\n                src={\"images/pink/letter.png\"}\n                width={40}\n                height={48}\n                style={{\n                  marginTop: 30,\n                  paddingRight: 30\n                }}\n              />\n              <p className=\"CertificateText\" style={{ textAlign: 'left', }}>\n                Выберите номер телефона или адрес<br />\n                почты, который будете использовать<br />\n                для входа в приложение\n              </p>\n\n            </div>\n\n            <div style={{\n              display: \"flex\",\n              flexDirection: 'row',\n              // marginTop: 20,\n            }}>\n              <img\n                src={\"images/pink/logo.png\"}\n                width={40}\n                height={53}\n                style={{\n                  marginTop: 30,\n                  paddingRight: 30\n                }}\n              />\n              <p className=\"CertificateText\" style={{ textAlign: 'left', }}>\n                Если у вас есть аккаунт Prosto,<br />\n                проверьте логин в профиле — это <br />\n                номер/почта, или если Apple ID/Google,<br />\n                то добавьте адрес почты и используйте <br />\n                его для активации\n              </p>\n            </div>\n\n            <div style={{\n              display: \"flex\",\n              flexDirection: 'row',\n            }}>\n              <img\n                src={\"images/pink/phone.png\"}\n                width={35}\n                height={61}\n                style={{\n                  marginTop: 30,\n                  paddingRight: 30\n                }}\n              />\n              <p className=\"CertificateText\" style={{ textAlign: 'left', }}>\n                После активации промокода войдите <br />\n                в приложение под указанным номером<br />\n                телефона или почтой.\n                <span style={{ color: '#EB7D8F', marginLeft: 5 }}>\n                  Если у вас была <br />\n                  активная подписка — отмените ее\n                </span>\n              </p>\n\n            </div>\n\n          </div>\n          <div style={{\n            display: \"flex\",\n            flexDirection: 'column',\n          }}>\n            <img\n              src={isForever === 'true' ? \"images/pink/present-banner.png\" : \"images/pink/present-banner-year.png\"}\n              width=\"413\"\n              height=\"456\"\n            />\n          </div>\n        </div>\n\n        <PartnerCertificate partner={partner} />\n\n        <div style={{\n          display: \"flex\",\n          flexDirection: 'column',\n          width: 170,\n          alignSelf: 'center',\n          alignItems: \"center\",\n          marginTop: 40,\n          marginBottom: 20\n        }}>\n          <img width={50} height={50} src={\"images/app-icon.png\"} />\n          <p className=\"FooterText\" style={{ color: '#000', fontSize: 12 }}>\n            Служба заботы<br />\n            С 09:00 до 21:00<br /><br />\n            <a href=\"mailto: help@prostoapp.com\" className=\"FooterMail\" style={{ textDecoration: 'none' }}>\n              help@prostoapp.com\n            </a>\n            <br /><br />\n          </p>\n          <div style={{ display: 'flex' }}>\n            <a className=\"FooterLink\" href=\"https://apps.apple.com/ru/app/просто-медитация-и-сон/id1490891826?mt=8\">\n              Appstore\n            </a>\n            <a className=\"FooterLink\" href='https://play.google.com/store/apps/details?id=com.prostoapp&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'>\n              GooglePlay\n            </a>\n          </div>\n        </div>\n\n      </div >\n\n      <div className='hideOnDesktop' style={{\n        position: 'absolute',\n        top: 0,\n        opacity: visible ? 1 : 0,\n        zIndex: 1000,\n        transition: 'opacity ease 500ms',\n        alignSelf: \"center\",\n        width: '100%',\n        flexDirection: 'column',\n        backgroundColor: '#fff',\n        margin: '0 auto',\n        textAlign: 'center',\n        paddingBottom: 32,\n      }}>\n        <div style={{\n          display: 'flex',\n          flexDirection: 'column',\n          alignItems: \"center\",\n          padding: 30\n        }}>\n          <img src=\"https://icons.prostoapp.com/podarok/pink/icon.png\" width=\"60\" height=\"60\" />\n          <p style={{\n            padding: 0,\n            margin: 0,\n            marginTop: 10,\n            fontSize: 14,\n            color: 'rgba(0,0,0,0.4)'\n          }}>\n            Prosto — Nº1 приложение<br />\n            для медитации и сна в России\n          </p>\n        </div>\n        <div style={{ zIndex: 2, width: 343, alignSelf: 'center' }}>\n          <img\n            src=\"images/pink/certificate-top-banner-mobile.png\"\n            width=\"343\"\n            height=\"533\"\n          />\n          {isForever === null ?\n            <></> :\n            <p style={{\n              position: \"absolute\",\n              marginLeft: 90,\n              marginTop: -436,\n              width: 210,\n              fontSize: '16px',\n              lineHeight: '25px',\n              textAlign: 'center',\n              color: '#EB7D8F'\n            }}>\n              Поздравляем с покупкой\n              доступа Prosto {isForever === 'true' ? 'Навсегда ' : 'на год '} <br />\n              со скидкой 72%!\n            </p>\n          }\n        </div>\n\n        <div style={{\n          marginTop: -170,\n          alignSelf: \"center\",\n          backgroundColor: '#FEE8EB',\n          width: '100%',\n          borderRadius: 16,\n          overflow: 'hidden',\n          paddingTop: 190,\n        }}>\n          <p className=\"TitleText\"\n            style={{\n              margin: '0 auto',\n              padding: 0,\n              fontSize: 30\n            }}\n          >\n            Подарочный<br /> сертификат\n          </p>\n          <div style={{\n            width: 300,\n            height: 56,\n            margin: '20px auto 20px auto',\n            background: copiedToClipboard ? \"#EB7D8F\" : \"#fff\",\n            borderRadius: 12,\n            display: 'flex',\n            alignItems: 'center',\n            cursor: 'pointer'\n          }}\n            onClick={copyCodeToClipboard}\n          >\n            {copiedToClipboard ?\n              <p style={{\n                margin: '0 auto',\n                padding: 0,\n                color: \"#fff\",\n                fontWeight: 'bold'\n              }}\n              >\n                {'Скопировано'}\n              </p> :\n              <div style={{\n                display: 'flex',\n                flex: 1,\n                justifyContent: 'space-between',\n                alignItems: \"center\"\n              }}>\n                <p className=\"TitleText\"\n                  style={{\n                    margin: 0,\n                    padding: 0,\n                    paddingLeft: 50,\n                  }}\n                >\n                  {code || ''}\n                </p>\n                <img\n                  src=\"images/pink/copy.png\"\n                  width=\"24\"\n                  height=\"24\"\n                  style={{ marginRight: 16 }}\n                />\n              </div>\n            }\n          </div>\n          <a style={{ textDecoration: 'none', color: '#000' }} href='https://code.prostoapp.ru'>\n            Активируйте на сайте <br />\n            <b>code.prostoapp.ru</b>\n          </a>\n          <div style={{\n            width: 196,\n            height: 30,\n            margin: '40px auto',\n            borderRadius: 8,\n            border: '1px solid #000',\n            display: 'flex',\n            justifyContent: 'center',\n            alignItems: 'center',\n            cursor: 'pointer'\n          }}\n            onClick={downloadPdf}\n          >\n            <img\n              src=\"images/pink/print.png\"\n              width=\"16\"\n              height=\"16\"\n            />\n            <p style={{ marginLeft: 8 }}>\n              {'Распечатать'}\n            </p>\n          </div>\n          {/* <img\n            src=\"images/pink/YuraYulia-mobile.png\"\n            width=\"376\"\n            height=\"241\"\n          /> */}\n        </div>\n\n        <p style={{\n          fontFamily: 'Gilroy Semibold',\n          fontSize: 26,\n        }}>\n          Как пользоваться?\n        </p>\n        <div style={{\n          display: \"flex\",\n          flexDirection: 'column',\n        }}>\n          <div style={{\n            display: \"flex\",\n            flexDirection: 'column',\n          }}>\n            <div style={{\n              display: \"flex\",\n              flexDirection: 'column',\n              alignItems: 'center'\n            }}>\n              <img\n                src={\"images/pink/ticket.png\"}\n                width={50}\n                height={35}\n              />\n              <p className=\"CertificateText\">\n                Зайдите на сайт <br />\n                <a style={{ color: '#EB7D8F' }}\n                  href='https://code.prostoapp.ru'> code.prostoapp.ru </a><br />\n                и активируйте<br />\n                промокод\n              </p>\n            </div>\n\n            <div style={{\n              display: \"flex\",\n              flexDirection: 'column',\n              alignItems: 'center',\n              marginTop: 20,\n            }}>\n              <img\n                src={\"images/pink/letter.png\"}\n                width={40}\n                height={48}\n              />\n              <p className=\"CertificateText\">\n                Выберите номер телефона<br />\n                или адрес почты, который <br />\n                будете использовать<br />\n                для входа в приложение\n              </p>\n            </div>\n\n            <div style={{\n              display: \"flex\",\n              flexDirection: 'column',\n              alignItems: 'center',\n              marginTop: 20,\n            }}>\n              <img\n                src={\"images/pink/logo.png\"}\n                width={40}\n                height={53}\n              />\n              <p className=\"CertificateText\">\n                Если у вас есть аккаунт Prosto,<br />\n                проверьте логин в профиле — <br />\n                это номер/почта, или если Apple <br />\n                ID/Google, то добавьте адрес почты<br />\n                и используйте  его для активации\n              </p>\n            </div>\n\n            <div style={{\n              display: \"flex\",\n              flexDirection: 'column',\n              alignItems: 'center',\n              marginTop: 20,\n            }}>\n              <img\n                src={\"images/pink/phone.png\"}\n                width={35}\n                height={61}\n              />\n              <p className=\"CertificateText\">\n                После активации промокода <br />\n                войдите в приложение под <br />\n                указанным номером <br />\n                телефона или почтой.<br />\n                <span style={{ color: '#EB7D8F' }}>\n                  Если у вас была активная <br />подписка — отмените ее\n                </span>\n              </p>\n\n            </div>\n\n          </div>\n          <div style={{\n            display: \"flex\",\n            flexDirection: 'column',\n            alignSelf: 'center',\n            marginTop: 30\n          }}>\n            <img\n              src={isForever === 'true' ? \"images/pink/present-banner.png\" : \"images/pink/present-banner-year.png\"}\n              width=\"343\"\n              height=\"384\"\n            />\n          </div>\n        </div>\n\n        <PartnerCertificate partner={partner} />\n\n        <div style={{\n          display: \"flex\",\n          flexDirection: 'column',\n          width: 170,\n          alignSelf: 'center',\n          alignItems: \"center\",\n          marginTop: 40,\n          marginBottom: 20\n        }}>\n          <img width={50} height={50} src={\"images/app-icon.png\"} />\n          <p className=\"FooterText\" style={{ color: '#000', fontSize: 12 }}>\n            Служба заботы<br />\n            С 09:00 до 21:00<br /><br />\n            <a href=\"mailto: help@prostoapp.com\" className=\"FooterMail\" style={{ textDecoration: 'none' }}>\n              help@prostoapp.com\n            </a>\n            <br /><br />\n          </p>\n          <div style={{ display: 'flex' }}>\n            <a className=\"FooterLink\" href=\"https://apps.apple.com/ru/app/просто-медитация-и-сон/id1490891826?mt=8\">\n              Appstore\n            </a>\n            <a className=\"FooterLink\" href='https://play.google.com/store/apps/details?id=com.prostoapp&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'>\n              GooglePlay\n            </a>\n          </div>\n        </div>\n\n      </div >\n\n    </>\n  );\n}\n\nexport default CertificateSheet;\n","import React, { useCallback, useState } from 'react';\nimport Lottie from 'react-lottie';\nimport CertificateSheet from './CertificateSheet';\n\nconst animationOptions = {\n  loop: false,\n  autoplay: true,\n  animationData: require('../../assets/animations/1.json'),\n  rendererSettings: {\n    preserveAspectRatio: 'xMidYMid meet'\n  }\n};\n\nconst introAnimation = require('../../assets/animations/1.json')\nconst introAnimationMobile = require('../../assets/animations/1-mobile.json')\n\nconst openAnimation = require('../../assets/animations/2.json')\nconst openAnimationMobile = require('../../assets/animations/2-mobile.json')\nconst openAnimationYear = require('../../assets/animations/2-year.json')\nconst openAnimationYearMobile = require('../../assets/animations/2-year-mobile.json')\n\nconst CertificateOpen: React.FC = () => {\n  const isMobile = window.screen.availWidth < 801\n  // console.log('isMobile', isMobile)\n  const params = new URLSearchParams(window.location.search)\n  const code = params.get(\"code\")\n  const id = params.get(\"id\")\n  const isForever = params.get(\"isForever\")\n  const partner = params.get(\"partner\")\n  const [introPlayed, setIntroPlayed] = useState(false)\n  const [showOpenAnimation, setShowOpenAnimation] = useState(false)\n  const [showCertificateSheet, setShowCertificateSheet] = useState(false)\n\n  const openCertificate = useCallback(() => {\n    if (!introPlayed) return\n    setShowOpenAnimation(true)\n  }, [introPlayed])\n\n  return (\n    <div style={{\n      position: 'absolute',\n      background: '#fff',\n      width: '100%',\n      height: '100%',\n      display: 'flex',\n      flexDirection: 'column',\n      justifyContent: 'center'\n    }}>\n      {!showOpenAnimation ?\n        <div style={{\n          zIndex: 999,\n          cursor: 'pointer',\n          width: '100%',\n          height: '100%',\n        }}\n          onClick={openCertificate}\n        >\n          <Lottie\n            isClickToPauseDisabled\n            options={{\n              ...animationOptions,\n              animationData: isMobile ? introAnimationMobile : introAnimation\n            }}\n            eventListeners={[\n              {\n                eventName: 'complete',\n                callback: () => setIntroPlayed(true),\n              },\n            ]}\n          />\n        </div> :\n        <div\n          style={{\n            width: '100%',\n            height: '100%',\n            zIndex: 999,\n          }}\n        >\n          <Lottie\n            isClickToPauseDisabled\n            options={{\n              ...animationOptions,\n              // animationData: openAnimation\n              animationData: isMobile ?\n                (isForever === 'true' ? openAnimationMobile : openAnimationYearMobile) :\n                (isForever === 'true' ? openAnimation : openAnimationYear)\n              // animationData: openAnimationYear\n            }}\n            eventListeners={[\n              {\n                eventName: 'complete',\n                callback: () => setShowCertificateSheet(true),\n              },\n            ]}\n          />\n        </div >\n      }\n      {showCertificateSheet &&\n        <CertificateSheet\n          visible\n          code={code}\n          id={id}\n          isForever={isForever}\n          partner={partner}\n        />}\n    </div>\n  );\n}\n\nexport default CertificateOpen;\n","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport CertificateScreen from '../screens/CertificateScreen/CertificateScreen';\nimport MainScreen from \"../screens/MainScreen/MainScreen\";\nimport HB24Screen from '../screens/HB24Screen/HB24Screen';\nimport ForeverScreen from '../screens/ForeverScreen/ForeverScreen';\nimport CertificateOpen from '../screens/CertificateOpen/CertificateOpen';\n\nconst MainRoutes: React.FC = () => {\n\n  return (\n    <div>\n      <Switch>\n        <Route\n          exact path='/'\n          component={MainScreen}\n        />\n        <Route\n          exact path='/certificate'\n          component={CertificateScreen}\n        />\n        <Route\n          exact path='/open-certificate'\n          component={CertificateOpen}\n        />\n        {/* <Route\n          exact path='/hb24'\n          component={HB24Screen}\n        /> */}\n        {/* <Route\n          exact path='/forever'\n          component={ForeverScreen}\n        /> */}\n      </Switch>\n    </div>\n  );\n}\n\nexport default MainRoutes;\n","import config from \"../config/config\";\nimport httpService, {IResponse} from \"../http/HttpService\";\n\nconst PROMO_CODES_URL = `${config.apiUrl}/promocodes`;\n\ninterface IActivateRequest {\n  phone: string;\n  promocode: string;\n}\n\nclass ActivatePromoCodeApi {\n  activate(data: IActivateRequest): Promise<IResponse> {\n    return httpService.post(`${PROMO_CODES_URL}/activate`, data);\n  }\n}\n\nexport default ActivatePromoCodeApi;\n","import ActivatePromoCodeApi from \"./api\";\n\nconst ACTIVATE_ERRORS: Record<number, string> = {\n  1013: \"Промокод уже активирован\",\n  1014: \"Промокод не найден\",\n  1015: \"Промокод не оплачен\",\n  1016: \"Некорректные символы в промокоде\",\n  1017: \"Вы уже активировали этот промокод\",\n};\n\ninterface IActivateResult {\n  success: boolean;\n  errorMessage?: string;\n}\n\nclass ActivatePromoCodeController {\n  private api = new ActivatePromoCodeApi();\n\n  async activatePromoCode(activatePromoCodeData: any): Promise<IActivateResult> {\n    \n    const response = await this.api.activate(activatePromoCodeData);\n\n    return {\n      success: response.success,\n      errorMessage: ACTIVATE_ERRORS[response.responseStatus!] ?? undefined,\n    };\n  }\n}\n\nexport default ActivatePromoCodeController;\n","import React, { useCallback, useState } from 'react';\nimport { useHistory } from \"react-router-dom\";\nimport CustomButton from '../../components/CustomButton/CustomButton';\nimport Footer from '../../components/Footer/Footer';\nimport PhoneInput from 'react-phone-input-2'\nimport './CodeActivation.css';\nimport ActivatePromoCodeController from '../../core/activatePromoCode/controller';\nimport domainRouter from \"../../navigation/domainRouter\";\nimport config from '../../core/config/config';\nimport CustomCheckbox from '../../components/CustomCheckbox/CustomCheckbox';\nimport { isValidEmail } from '../MainScreen/MainScreen';\nimport CustomInput from '../../components/CustomInput/CustomInput';\n\nconst prostoAppIcon = \"images/ProstoappIcon.png\";\nconst CodeActivationPresent = \"images/Present.png\";\n\nconst controller = new ActivatePromoCodeController();\n\nconst CodeActivation: React.FC = () => {\n  const [activationType, setActivationType] = useState<'email' | 'phone'>('email');\n  const [code, setCode] = useState(\"\");\n  const [phone, setPhone] = useState(\"\");\n  const [email, setEmail] = useState(\"\");\n  const [confirmCorrectInput, setConfirmCorrectInput] = useState(false);\n  const [error, setError] = useState<string | null>(null)\n  const history = useHistory();\n\n  const validateForm = useCallback(() => {\n    // validate promo code\n    const reg = /[A-Za-z0-9]+/;\n    const validation = reg.test(code);\n    if (!validation || code.length < 4) {\n      setError('Неверный промокод')\n      return false\n    }\n    // validate email\n    if (activationType === 'email') {\n      if (!isValidEmail(email)) {\n        setError('Неверный email')\n        return false\n      }\n    } else {\n      console.log('phone', phone)\n      if (phone.length < 4 || phone.length > 20) {\n        setError('Неверный номер телефона')\n        return false\n      }\n    }\n    setConfirmCorrectInput(true)\n    return true\n  }, [activationType, code, phone, email, setError]);\n\n  const handleActivation = useCallback(async () => {\n    if (validateForm()) {\n      const activatePromoCodeData: any = { promocode: code }\n\n      if (activationType === 'email') {\n        activatePromoCodeData['email'] = email\n      } else {\n        activatePromoCodeData['phone'] = phone\n      }\n\n      const activateResult = await controller.activatePromoCode(activatePromoCodeData);\n\n      if (activateResult.success) {\n        history.push(\"/activated\");\n        return;\n      }\n\n      setError(activateResult.errorMessage ?? \"Неизвестная ошибка\");\n    }\n  }, [activationType, code, phone, email, setError]);\n\n  const handleBuy = useCallback(() => {\n    domainRouter.go(config.giftRoute);\n  }, [])\n\n  const handleCode = useCallback(\n    (event: React.ChangeEvent<HTMLInputElement>) => {\n      const text = event.target.value.replace(/\\W/g, '').toUpperCase();\n      setCode(text);\n      setError(null)\n    }, [setCode, setError])\n\n  const handlePhone = useCallback(\n    (phoneNumber: string) => {\n      setPhone(phoneNumber)\n      setError(null)\n    }, [setPhone, setError])\n\n  const handleEmail = useCallback(\n    (email: string) => {\n      setEmail(email)\n      setError(null)\n    }, [setEmail, setError])\n\n  const changeActivationType = useCallback((type: 'email' | 'phone') => {\n    setActivationType(type)\n    setConfirmCorrectInput(false)\n    setError(null)\n  }, [])\n\n\n  return (\n    <div className=\"CodeActivationBlock\">\n      <img className=\"ProstoAppIconMain\" src={prostoAppIcon} />\n      <div className=\"CodeActivationUpper\">\n        <p className=\"CodeActivationTitle\">Активация промокода</p>\n        <div className=\"ActivationTypeSelector\">\n          <button\n            className={\n              activationType === 'email' ? \"ActivationTypeSelectorButtonActive\" : \"ActivationTypeSelectorButton\"\n            }\n            onClick={() => changeActivationType('email')}>\n            Email\n          </button>\n          <button\n            className={\n              activationType === 'phone' ? \"ActivationTypeSelectorButtonActive\" : \"ActivationTypeSelectorButton\"\n            }\n            onClick={() => changeActivationType('phone')} >\n            Телефон\n          </button>\n        </div>\n        <div className=\"CodeActivationInfo\">\n          Выберите номер телефона или адрес почты,\n          который будете использовать для входа в приложение.\n        </div>\n        <div className=\"CodeActivationInfo\">\n          <b>Если у вас есть аккаунт Prosto</b>, проверьте логин в профиле —\n          это номер/почта, или если Apple ID/Google,\n          то добавьте адрес почты и используйте его для активации\n        </div>\n        <div className=\"CodeActivationInputBlock\">\n          <div className=\"CodeActivationInput\">\n            {activationType === 'phone' ?\n              <PhoneInput\n                enableLongNumbers\n                country={'ru'}\n                value={phone}\n                inputProps={{ required: true, autoFocus: false }}\n                onChange={handlePhone}\n                specialLabel=\"\"\n              /> :\n              <CustomInput\n                className=\"CodeActivationEmailInput\"\n                placeholder=\"Электронная почта\"\n                defaultValue={email}\n                onChange={(e) => handleEmail(e.target.value)}\n              />\n            }\n          </div>\n          <div className=\"CodeActivationInput\">\n            <input placeholder=\"Промокод\" onChange={handleCode} value={code} minLength={4} maxLength={20} />\n          </div>\n          <div style={{ paddingLeft: 20, paddingBottom: 15, marginTop: -25 }}>\n            <CustomCheckbox title=\"Данные введены верно\" value={confirmCorrectInput} onChange={validateForm} />\n            {\n              error && <p style={{ color: 'red' }}>{error}</p>\n            }\n          </div>\n          <div className=\"CodeActivationInput\">\n            <CustomButton title=\"Активировать\" onClick={handleActivation} disabled={!confirmCorrectInput} />\n          </div>\n        </div>\n        <div className=\"CodeActivationBuy\">\n          <img className=\"CodeActivationPresent\" src={CodeActivationPresent} />\n          <div className=\"CodeActivationBuyButton\">\n            <CustomButton title=\"Купить подписку в подарок\" onClick={handleBuy} />\n          </div>\n        </div>\n      </div>\n      <Footer />\n    </div>\n  );\n}\n\nexport default CodeActivation;\n","import styles from \"./CodeActivated.module.css\";\nimport React, { useCallback } from \"react\";\nimport CustomButton from \"../../components/CustomButton/CustomButton\";\nimport Footer from \"../../components/Footer/Footer\";\n\nconst prostoAppIcon = \"images/ProstoappIcon.png\";\nconst activatedIcon = \"images/Firework.png\";\n\nconst CodeActivated: React.FC = () => {\n  const handleIOsClick = useCallback(() => {\n    window.location.href = \"https://apps.apple.com/ru/app/просто-медитация-и-сон/id1490891826?mt=8\";\n  }, []);\n\n  const handleAndroidClick = useCallback(() => {\n    window.location.href = \"https://play.google.com/store/apps/details?id=com.prostoapp&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1\";\n  }, []);\n\n  return (\n    <div className={styles.Root}>\n      <img className={styles.AppIcon} src={prostoAppIcon} />\n      <div className={styles.UpperBlock}>\n        <img className={styles.ActivatedIcon} src={activatedIcon} />\n        <p className={styles.TitleText}>Промокод успешно активирован</p>\n        <p className={styles.Text}>\n          Войдите в приложение под указанным email или номером телефона.\n          Вы увидите сообщение, что получили подписку в подарок\n        </p>\n      </div>\n      <div className={styles.Buttons}>\n        <CustomButton className={styles.Button} title={\"Установить IOS\"} onClick={handleIOsClick} />\n        <CustomButton className={styles.Button} title={\"Установить Android\"} onClick={handleAndroidClick} />\n      </div>\n      <Footer />\n    </div>\n  );\n}\n\nexport default CodeActivated;\n","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport CodeActivation from '../screens/CodeActivation/CodeActivation';\nimport CodeActivated from \"../screens/CodeActivated/CodeActivated\";\n\nconst CodeRoutes: React.FC = () => {\n\n  return (\n    <div>\n      <Switch>\n        <Route\n          exact path='/'\n          component={CodeActivation}\n        />\n        <Route\n          path='/activated'\n          component={CodeActivated}\n        />\n      </Switch>\n    </div>\n  );\n}\n\nexport default CodeRoutes;\n","import React, { useCallback } from \"react\";\nimport styles from \"./CorporateRadio.module.css\";\nimport { Label, Radio } from \"theme-ui\";\nimport { TPayMethod } from \"../../types/TPayMethod\";\n\ninterface IProps {\n  value?: TPayMethod;\n  onChange?: (newValue: TPayMethod) => void;\n}\n\nconst CorporateRadio: React.FC<IProps> = ({ value= \"card\", onChange= () => {} }) => {\n  const handleChange = useCallback(\n    (event: React.ChangeEvent<HTMLInputElement>) => {\n      const newValue = event.currentTarget.value;\n      if (newValue !== value) {\n        onChange(newValue as TPayMethod);\n      }\n    },\n    [onChange, value],\n  );\n\n  return (\n    <div className={styles.Root}>\n      <Label className={styles.RadioItem}>\n        <Radio\n          className={styles.RadioInput}\n          value=\"card\"\n          checked={value === \"card\"}\n          name=\"CorporateRadio\"\n          onChange={handleChange}\n        />\n        <span className={styles.Text}>Оплатить онлайн</span>\n      </Label>\n      <Label className={styles.RadioItem}>\n        <Radio\n          className={styles.RadioInput}\n          value=\"bill\"\n          checked={value === \"bill\"}\n          name=\"CorporateRadio\"\n          onChange={handleChange}\n        />\n        <span className={styles.Text}>Выставить счет</span>\n      </Label>\n    </div>\n  );\n}\n\nexport default CorporateRadio;\n","import styles from \"./CorporateCalculator.module.css\";\nimport React, { useCallback, useState } from \"react\";\nimport CustomInput from \"../CustomInput/CustomInput\";\nimport Selector from \"../Selector/Selector\";\nimport CustomButton from \"../CustomButton/CustomButton\";\nimport CorporateRadio from \"./CorporateRadio\";\nimport { ICorporateScreenState } from \"../../types/ICorporateScreenState\";\nimport { TPayMethod } from \"../../types/TPayMethod\";\nimport PhoneInput from \"react-phone-input-2\";\nimport config from \"../../core/config/config\";\n\nexport interface ICorporateCalculatorProps {\n  data: ICorporateScreenState;\n  onClick?: () => void;\n  onDataChange: (state: ICorporateScreenState) => void;\n}\n\nconst CorporateCalculator: React.FC<ICorporateCalculatorProps> = ({ data, onClick, onDataChange }) => {\n  const [price, setPrice] = useState(\n    {\n      count: 1,\n      newPrice: 379,\n      discount: 34,\n      corporateDiscount: 40,\n      benefit: 0,\n      month: 12\n    }\n  );\n\n  const handlePhoneChange = useCallback((phoneNumber: string) => {\n    onDataChange({\n      ...data,\n      phone: phoneNumber,\n    });\n  }, [data, onDataChange]);\n\n  const handleEmailChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n    onDataChange({\n      ...data,\n      email: event.target.value,\n    });\n  }, [data, onDataChange]);\n\n  const handleCompanyChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n    onDataChange({\n      ...data,\n      companyName: event.target.value,\n    });\n  }, [data, onDataChange]);\n\n  const handleINNChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n    onDataChange({\n      ...data,\n      inn: event.target.value,\n    });\n  }, [data, onDataChange]);\n\n  const handleWorkPhoneChange = useCallback((phoneNumber: string) => {\n    onDataChange({\n      ...data,\n      workPhone: phoneNumber,\n    });\n  }, [data, onDataChange]);\n\n  const handleAddressChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n    onDataChange({\n      ...data,\n      legalAddress: event.target.value,\n    });\n  }, [data, onDataChange]);\n\n  const getPrice = useCallback((priceInfo) => {\n    setPrice(priceInfo);\n    onDataChange({\n      ...data,\n      subscriptionCount: priceInfo.count,\n      subscriptionDuration: priceInfo.month,\n      subscriptionPrice: (priceInfo.newPrice - priceInfo.benefit) * priceInfo.count,\n      discount: priceInfo.discount,\n      corporateDiscount: priceInfo.corporateDiscount,\n    })\n  }, [data, onDataChange]);\n\n  const handlePromoCodeChange = useCallback((event: React.ChangeEvent<HTMLInputElement>) => {\n    const PROMO_CODE_SYMBOLS = /^[A-Z\\d]*$/;\n    const newValue = event.target.value.toUpperCase();\n\n    if (PROMO_CODE_SYMBOLS.test(newValue)) {\n      onDataChange({\n        ...data,\n        promoCode: newValue,\n      })\n    }\n  }, [data, onDataChange]);\n\n  const handlePayMethodChange = useCallback((newValue: TPayMethod) => {\n    onDataChange({\n      ...data,\n      payMethod: newValue\n    })\n\n  }, [data, onDataChange])\n\n\n  return (\n    <div className={styles.CalculatorBlock}>\n      <div>\n        <div className={styles.CalculatorTitleContainer}>\n          <p className={styles.CalculatorTitle}>Подарить спокойствие своим сотрудникам это просто.</p>\n        </div>\n        <div className={styles.PhoneInput}>\n          <PhoneInput country={'ru'} value={data.phone} inputProps={{ required: true, autoFocus: true }} onChange={handlePhoneChange} specialLabel=\"\" />\n        </div>\n        <CustomInput type=\"email\" className={styles.Email} inputClassName=\"Email\" placeholder=\"Ваша электронная почта\" onChange={handleEmailChange} />\n        <p className={styles.CalculatorAdditionalText}>На указанную почту будет отправлен сертификат</p>\n        <div className={styles.CalculatorBottomBlock}>\n          <div className={styles.CalculatorBottomLeftBlock}>\n            <p className={styles.CalculatorTextFirst}>Число подписок</p>\n            <p className={styles.CalculatorTextSecond}>Тип подписки</p>\n            <p className={styles.CalculatorText}>Цена</p>\n            {!!price.discount && <p className={styles.CalculatorText}>Скидка за период</p>}\n            {!!price.corporateDiscount && <p className={styles.CalculatorText}>Скидка корпоративная</p>}\n            <p className={styles.CalculatorText}>Итого к оплате</p>\n          </div>\n          <div className={styles.CalculatorBottomRightBlock}>\n            <Selector getPrice={getPrice} showCountSelector useCorporateDiscount />\n            <div className={styles.CalculatorBottomRightBlockText}>\n              <p className={styles.CalculatorText}>\n                {price.newPrice.toLocaleString('ru-RU') || 0} <span className=\"RubleIcon\">₽</span>\n              </p>\n              {!!price.discount && <p className={styles.CalculatorText}>-{price.discount}%</p>}\n              {!!price.corporateDiscount && <p className={`${styles.CalculatorText} ${styles.CalculatorText2x}`}>-{price.corporateDiscount}%</p>}\n              <p className={styles.CalculatorText}>\n                {((price.newPrice - price.benefit) * price.count).toLocaleString('ru-RU') || 0} <span className=\"RubleIcon\">₽</span>\n              </p>\n            </div>\n          </div>\n        </div>\n        <div className={styles.Email}>\n          <input\n            className={styles.PromoCodeInput}\n            placeholder=\"Промокод\"\n            value={data.promoCode}\n            onChange={handlePromoCodeChange}\n            minLength={4}\n            maxLength={16}\n          />\n          <p className={styles.CalculatorAdditionalText}>Ваше пожелание по тому, как должен выглядеть промокод</p>\n        </div>\n      </div>\n      <div className={styles.CalculatorFooter}>\n\n        <CorporateRadio value={data.payMethod} onChange={handlePayMethodChange} />\n\n        {(data.payMethod === 'bill') &&\n          <CustomInput type=\"text\" className={styles.Email} inputClassName=\"Email\" placeholder=\"Название компании\" onChange={handleCompanyChange} minLength={3} maxLength={100} />}\n        {(data.payMethod === 'bill') &&\n          <CustomInput type=\"text\" className={styles.Email} inputClassName=\"Email\" placeholder=\"ИНН\" onChange={handleINNChange} minLength={10} maxLength={12} />}\n        {(data.payMethod === 'bill') && <div className={styles.PhoneInput}>\n          <PhoneInput value={data.workPhone} inputProps={{ required: true }} onChange={handleWorkPhoneChange} specialLabel=\"\" placeholder=\"Рабочий телефон\" />\n        </div>}\n        {(data.payMethod === 'bill') &&\n          <CustomInput type=\"text\" className={styles.Email} inputClassName=\"Email\" placeholder=\"Юридический адрес\" onChange={handleAddressChange} minLength={3} maxLength={20} />}\n\n        <div style={{ marginTop: 30, marginBottom: 15 }}>\n          <CustomButton title={data.loading ? \"Обработка...\" : \"Оформить корпоративный подарок\"} onClick={onClick} disabled={!data.canPay} />\n        </div>\n\n        <p className={styles.CalculatorOffer}>\n          {\"Оформляя покупку, вы соглашаетесь с \"}\n          <a className=\"CalculatorLink\" href={config.privacyUrl} target='_blanc'>Договором оферты</a>\n        </p>\n      </div>\n    </div>\n  );\n}\n\nexport default CorporateCalculator;\n","import React from \"react\";\nimport styles from \"./UpperCorporateBlock.module.css\";\nimport CorporateCalculator from \"../CorporateCalculator/CorporateCalculator\";\nimport { ICorporateScreenState } from \"../../types/ICorporateScreenState\";\n\ninterface IProps {\n  data: ICorporateScreenState;\n  onBuyClick: () => void;\n  onDataChange: (newState: ICorporateScreenState) => void;\n}\n\n\nconst UpperCorporateBlock: React.FC<IProps> = ({ data, onBuyClick, onDataChange }) => {\n  return (\n    <div className={styles.Root}>\n      <div className={styles.ProstoAppIcon} />\n      <div className={styles.MainBlock}>\n        <div className={styles.LeftTextContainer} />\n        <div className={styles.MainContainer}>\n          <CorporateCalculator data={data} onDataChange={onDataChange} onClick={onBuyClick} />\n        </div>\n        <a className={styles.HowItWorks} href=\"#advices\">Как это работает?</a>\n        <div className={styles.TextContainer}>\n          <p className={styles.MainTitle}>Корпоративный подарок</p>\n          <p className={styles.AdditionalText}>\n            Поделись спокойствием, хорошим сном и осознанностью.\n            Подарочный сертификат открывает доступ ко всем медитациям и образовательным видео приложения Prosto\n          </p>\n        </div>\n      </div>\n      <div className={styles.BackgroundImageContainer}>\n        <div className={styles.BackgroundImage} />\n      </div>\n    </div>\n  );\n}\n\nexport default UpperCorporateBlock;\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport UpperCorporateBlock from \"../../components/UpperCorporateBlock/UpperCorporateBlock\";\nimport BottomMainBlock from \"../../components/BottomMainBlock/BottomMainBlock\";\nimport Footer from \"../../components/Footer/Footer\";\nimport domainRouter from \"../../navigation/domainRouter\";\nimport config from \"../../core/config/config\";\nimport \"./CorporateSubscription.css\";\nimport { ICorporateScreenState } from \"../../types/ICorporateScreenState\";\nimport BuyCorporateSubscriptionController from \"../../core/buyCorporateSubscription/controller\";\nimport { useHistory } from \"react-router-dom\";\nimport debounce from \"lodash.debounce\";\nimport ym from \"react-yandex-metrika\";\n// import { withId } from 'react-yandex-metrika';\n\nconst controller = new BuyCorporateSubscriptionController();\nconst CorporateSubscription: React.FC = () => {\n  console.log('corp')\n  const [screenState, setScreenState] = useState<ICorporateScreenState>({\n    phone: \"\",\n    email: \"\",\n    subscriptionCount: 0,\n    subscriptionDuration: 0,\n    subscriptionPrice: 0,\n    discount: 0,\n    corporateDiscount: 0,\n    promoCode: \"\",\n    payMethod: \"card\",\n    canPay: false,\n    companyName: \"\",\n    inn: \"\",\n    workPhone: \"\",\n    legalAddress: \"\"\n  });\n\n  const [screenStateCard, setScreenStateCard] = useState<ICorporateScreenState>({\n    phone: \"\",\n    email: \"\",\n    subscriptionCount: 0,\n    subscriptionDuration: 0,\n    subscriptionPrice: 0,\n    discount: 0,\n    corporateDiscount: 0,\n    promoCode: \"\",\n    payMethod: \"card\",\n    canPay: false,\n  });\n\n  const history = useHistory();\n\n  const handleDataChange = useCallback((newState: ICorporateScreenState) => {\n    setScreenState({\n      ...newState,\n      canPay: (isValidEmail(newState.email) &&\n        isValidPhone(newState.phone) &&\n        isValidPromoCode(newState.promoCode) && newState.payMethod === 'card') || (\n          isValidEmail(newState.email) &&\n          isValidPhone(newState.phone) &&\n          isValidPromoCode(newState.promoCode) && newState.payMethod === 'bill' &&\n          isValidPhone(newState.workPhone!) &&\n          isValidINN(newState.inn!) &&\n          isValidName(newState.companyName!) &&\n          isValidName(newState.legalAddress!))\n    });\n    setScreenStateCard({\n      ...newState,\n      canPay: (isValidEmail(newState.email) &&\n        isValidPhone(newState.phone) &&\n        isValidPromoCode(newState.promoCode) &&\n        newState.payMethod === 'card')\n    })\n  }, []);\n\n  const handleBuyClick = useCallback(debounce(async () => {\n    // withId(92179976)('reachGoal','pressBuyCorpSubscription')\n    // ym('reachGoal', 'oformitpodarok');\n    window.generalPixel.postClick('a2');\n    const promoCode = await controller.buyPromoCode({\n      ...screenStateCard,\n    });\n\n    setScreenState({...screenState, loading: true})\n\n    if (!promoCode) {\n      setScreenState({...screenState, loading: false})\n      alert(\"Не получилось. Попробуйте ещё раз.\");\n      return;\n    }\n\n    if (screenState.payMethod === \"card\") {\n      if (promoCode.paymentLink) {\n        window.location.href = promoCode.paymentLink\n      } else {\n        setScreenState({...screenState, loading: false})\n        alert(\"Не получилось сгенерировать форму для оплаты! Попробуйте ещё раз.\");\n      }\n    } else {\n      history.push(\"/manager_screen\");\n    }\n  }, 2000, { leading: true, trailing: false }), [screenState])\n\n  const handleActivateClick = useCallback(() => {\n    domainRouter.go(config.codeRoute);\n  }, []);\n\n  // useEffect(() => {\n  //   withId(92179976)('reachGoal', 'enteredCorp');\n  // }, [withId])\n\n  return (\n    <div className=\"CorpSubRoot\">\n      <UpperCorporateBlock\n        data={screenState}\n        onDataChange={handleDataChange}\n        onBuyClick={handleBuyClick}\n      />\n      <BottomMainBlock\n        onActivateClick={handleActivateClick}\n        isCorp\n      />\n      <Footer />\n    </div>\n  );\n};\n\nconst EMAIL_REG = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\nfunction isValidEmail(value: string): boolean {\n  return EMAIL_REG.test(value);\n}\n\nfunction isValidPhone(value: string): boolean {\n  if (value.length >= 4 && value.length <= 20) {\n    return true;\n  } else {\n    return false;\n  }\n}\n\nconst INN_REG = /^[0-9]*$/;\nfunction isValidINN(value: string): boolean {\n  return INN_REG.test(value);\n}\n\nconst PROMO_CODE_REG = /(^$)|(^[\\dA-Z]{4,16}$)/;\nfunction isValidPromoCode(value: string): boolean {\n  return PROMO_CODE_REG.test(value);\n}\n\nfunction isValidName(value: string): boolean {\n  if (value) {\n    return true;\n  } else {\n    return false;\n  };\n}\n\nexport default CorporateSubscription;\n","import { TPayMethod } from \"../../types/TPayMethod\";\nimport BuyGiftSubscriptionApi from \"../buyGiftSubscription/api\";\n\ninterface IPromoCode {\n  id: number;\n  text: string;\n  price: number;\n  amountTotal: number;\n  paymentLink?: string;\n}\n\ninterface IBuyParams {\n  phone: string;\n  email: string;\n  subscriptionCount: number;\n  subscriptionDuration: number;\n  subscriptionPrice: number;\n  promoCode: string;\n  payMethod: TPayMethod;\n  discount: number;\n  corporateDiscount?: number;\n  companyName?: string,\n  inn?: string,\n  workPhone?: string,\n  legalAddress?: string\n}\n\nclass BuyCorporateSubscriptionController {\n  private api = new BuyGiftSubscriptionApi();\n\n  async buyPromoCode(params: IBuyParams): Promise<IPromoCode | false> {\n    const promoCode = await this.createPromoCode(params);\n    if (!promoCode) return false;\n    return promoCode;\n  }\n\n  private async createPromoCode(params: IBuyParams): Promise<IPromoCode | null> {\n    const response = await this.api.createPromoCode({\n      isCorporate: true,\n      method: params.payMethod,\n      amountTotal: params.subscriptionCount,\n      text: params.promoCode || undefined,\n      phone: params.phone,\n      email: params.email,\n      months: params.subscriptionDuration,\n      price: params.subscriptionPrice,\n      discount: params.discount,\n      discountCorporation: params.corporateDiscount,\n      paymentMethod: 'tinkoff',\n    });\n\n    if (!response) {\n      return null;\n    }\n\n    return {\n      id: response.id,\n      text: response.text,\n      price: response.price,\n      amountTotal: response.amountTotal,\n      paymentLink: response.link,\n    }\n  }\n\n  // private async requestUserPayment({ subscriptionCount, subscriptionDuration, email }: IBuyParams, promoCode: IPromoCode): Promise<boolean> {\n  //   const form = this.createTinkoffForm({\n  //     totalPrice: promoCode.price,\n  //     orderId: promoCode.id,\n  //     description: `${subscriptionCount} подписок на ${subscriptionDuration} месяцев для ${email}`,\n  //     email\n  //   })\n  //   window.pay(form);\n  //   return true;\n  // }\n\n  // private createTinkoffForm(params: {\n  //   totalPrice: number,\n  //   orderId: number,\n  //   description: string,\n  //   email: string,\n  // }) {\n\n  //   const receiptData =\n  //   {\n  //     Email: params.email,\n  //     EmailCompany: \"help@prostoapp.com\",\n  //     Taxation: \"usn_income\",\n  //     Items: [{\n  //       Name: \"Cертификат на подписку на приложение Prosto\",\n  //       Price: params.totalPrice * 100,\n  //       Quantity: 1.00,\n  //       Amount: params.totalPrice * 100,\n  //       Tax: \"none\",\n  //     }],\n  //   }\n\n  //   const form = document.createElement(\"form\");\n\n  //   const fields = document.createDocumentFragment();\n  //   fields.appendChild(this.createInput(\"terminalkey\", config.tinkoffTerminalKey));\n  //   fields.appendChild(this.createInput(\"frame\", \"true\"));\n  //   fields.appendChild(this.createInput(\"language\", \"ru\"));\n  //   fields.appendChild(this.createInput(\"amount\", params.totalPrice.toString()));\n  //   fields.appendChild(this.createInput(\"order\", params.orderId.toString()));\n  //   fields.appendChild(this.createInput(\"description\", params.description));\n  //   fields.appendChild(this.createInput(\"email\", params.email));\n  //   fields.appendChild(this.createInput(\"receipt\", JSON.stringify(receiptData)));\n\n  //   form.appendChild(fields);\n\n  //   return form;\n  // }\n\n  // private createInput(name: string, value: string) {\n  //   const input = document.createElement(\"input\");\n  //   input.type = \"hidden\";\n  //   input.name = name;\n  //   input.value = value;\n  //   return input;\n  // }\n}\n\nexport default BuyCorporateSubscriptionController;\n","import React from 'react';\nimport Footer from '../../components/Footer/Footer';\nimport styles from \"./ManagerScreen.module.css\";\n\nconst prostoAppIcon = \"images/ProstoappIcon.png\";\nconst managerIcon = \"images/Manager.png\";\n\nconst ManagerScreen: React.FC = () => {\n\n  return (\n    <div className={styles.ManagerScreen}>\n      <img className={styles.AppIcon} src={prostoAppIcon} />\n      <img className={styles.ManagerIcon} src={managerIcon} />\n      <p className={styles.TitleText}>Наш менеджер свяжется с вами</p>\n      <Footer />\n    </div>\n  );\n}\n\nexport default ManagerScreen;\n","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport CertificateScreen from '../screens/CertificateScreen/CertificateScreen';\nimport CorporateSubscription from '../screens/CorporateSubscription/CorporateSubscription';\nimport ManagerScreen from '../screens/ManagerScreen/ManagerScreen';\n\nconst CorporativeRoutes: React.FC = () => {\n\n  return (\n    <div>\n      <Switch>\n        <Route\n          exact path='/'\n          component={CorporateSubscription}\n        />\n        <Route\n          exact path='/manager_screen'\n          component={ManagerScreen}\n        />\n        <Route\n          exact path='/certificate'\n          component={CertificateScreen}\n        />\n      </Switch>\n    </div>\n  );\n}\n\nexport default CorporativeRoutes;\n","import { TPayMethod } from \"../../types/TPayMethod\";\nimport config from \"../config/config\";\nimport httpService from \"../http/HttpService\";\n\nconst PROMO_CODES_URL = `${config.apiUrl}/promocodes`;\n\ninterface IBuyPromoCodeRequest {\n  phone?: string;\n  months: number;\n  amountTotal: number;\n  price: number;\n  isCorporate: boolean;\n  method: TPayMethod;\n  text?: string;\n  discount?: number;\n  discountCorporation?: number;\n  companyName?: string,\n  inn?: string,\n  workPhone?: string,\n  legalAddress?: string\n}\n\ninterface IBuyPromoCodeResponse {\n  id: number;\n  text: string;\n  amountTotal: number;\n  amountLeft: number;\n  months: number;\n  price: number;\n  phone: string;\n  method: string;\n  isCorporate: boolean;\n  creationDate: string;\n  paymentDate: string;\n}\n\nclass BuySubscriptionApi {\n  async createSubscription(data: IBuyPromoCodeRequest): Promise<IBuyPromoCodeResponse | null> {\n    const response = await httpService.post(`${PROMO_CODES_URL}/buy/binding`, data);\n    return response.success ? response.data as IBuyPromoCodeResponse : null;\n  }\n}\n\nexport default BuySubscriptionApi;\n","import React, { useCallback, useState } from 'react';\nimport Footer from '../../components/Footer/Footer';\nimport UpperMainBlock from '../../components/UpperMainBlock/UpperMainBlock';\nimport ym from 'react-yandex-metrika';\nimport { IMainScreenState } from \"../../types/IMainScreenState\";\nimport { useHistory } from 'react-router-dom';\nimport debounce from \"lodash.debounce\";\nimport BuySubscriptionController from '../../core/buySubscription/controller';\n\nconst controller = new BuySubscriptionController();\n\nconst BuySubscription: React.FC = () => {\n  \n  const [screenState, setScreenState] = useState<IMainScreenState>({\n    email: \"\",\n    confirmEmail: false,\n    promocodeId: null,\n    text: \"\",\n    phone: \"\",\n    months: 0,\n    price: 0,\n    discount: 0,\n    canPay: false,\n    paymentMethod: 'tinkoff',\n  });\n  const history = useHistory();\n\n  const handleDataChange = useCallback((newState: IMainScreenState) => {\n    setScreenState({\n      ...newState\n    });\n  }, [setScreenState]);\n\n  const handleBuyClick = useCallback(debounce(async () => {\n    window.generalPixel.postClick('a2');\n    const promocode = await controller.buySubscription(screenState.months, screenState.price, screenState.discount, screenState.phone);\n\n    if (!promocode) {\n      alert(\"Не получилось сгенерировать промокод! Попробуйте ещё раз.\");\n      return;\n    }\n\n    setScreenState({ ...screenState, promocodeId: promocode.id, text: promocode.text });\n    // ym('reachGoal', 'buy_certificate');\n    history.push({\n      pathname: '/activated',\n      state: {\n        promocodeId: promocode.id,\n        text: promocode.text,\n      },\n    });\n  }, 2000, { leading: true, trailing: false }), [screenState.phone, screenState.months, screenState.price])\n\n  return (\n    <>\n      <UpperMainBlock data={screenState} onDataChange={handleDataChange} onBuyClick={handleBuyClick} promoCalculator={true}/>\n      <Footer />\n    </>\n  );\n}\n\nexport default BuySubscription;\n","import BuyGiftSubscriptionApi from \"./api\";\nimport config from \"../config/config\";\nimport \"./TinkoffFrameFix.css\";\n\ninterface IPromoCode {\n  id: number;\n  text: string;\n  price: number;\n  amountTotal: number;\n}\n\nclass BuySubscriptionController {\n  private api = new BuyGiftSubscriptionApi();\n\n  async buySubscription(months: number, price: number, discount: number, phone: string): Promise<IPromoCode | false> {\n    const promoCode = await this.createSubscription(months, price, discount, phone);\n    if (!promoCode) return false;\n\n    // if (!await this.requestUserPayment(phone, promoCode, months)) {\n    //   return false;\n    // }\n\n    return promoCode;\n  }\n\n\n  private async createSubscription(months: number, price: number, discount: number, phone: string): Promise<IPromoCode | null> {\n    const response = await this.api.createSubscription({\n      isCorporate: false,\n      method: \"card\",\n      amountTotal: 1,\n      months,\n      price,\n      phone,\n      discount\n    })\n\n    if (!response) {\n      return null;\n    }\n\n    return {\n      id: response.id,\n      text: response.text,\n      price: response.price,\n      amountTotal: response.amountTotal,\n    }\n  }\n\n  // private async requestUserPayment(phone: string, promoCode: IPromoCode, months: number): Promise<boolean> {\n  //   const form = this.createTinkoffForm({\n  //     totalPrice: promoCode.amountTotal * promoCode.price,\n  //     orderId: promoCode.id,\n  //     description: `Подписка на ${months} месяцев для ${phone}`,\n  //     phone\n  //   })\n  //   window.pay(form);\n  //   return true;\n  // }\n\n  // private createTinkoffForm(params: {\n  //   totalPrice: number,\n  //   orderId: number,\n  //   description: string,\n  //   phone: string,\n  // }) {\n  //   const receiptData = \n  //   {\n  //     Phone: params.phone,\n  //     EmailCompany: \"help@prostoapp.com\",\n  //     Taxation: \"usn_income\",\n  //     Items: [{\n  //       Name: \"Cертификат на подписку на приложение Prosto\",\n  //       Price: params.totalPrice * 100,\n  //       Quantity: 1.00,\n  //       Amount: params.totalPrice * 100,\n  //       Tax: \"none\",\n  //     }],\n  //   }\n\n  //   const form = document.createElement(\"form\");\n\n  //   const fields = document.createDocumentFragment();\n  //   fields.appendChild(this.createInput(\"terminalkey\", config.tinkoffTerminalKey));\n  //   fields.appendChild(this.createInput(\"frame\", \"true\"));\n  //   fields.appendChild(this.createInput(\"language\", \"ru\"));\n  //   fields.appendChild(this.createInput(\"amount\", params.totalPrice.toString()));\n  //   fields.appendChild(this.createInput(\"order\", params.orderId.toString()));\n  //   fields.appendChild(this.createInput(\"description\", params.description));\n  //   fields.appendChild(this.createInput(\"phone\", params.phone));\n  //   fields.appendChild(this.createInput(\"receipt\", JSON.stringify(receiptData)));\n\n\n  //   form.appendChild(fields);\n\n  //   return form;\n  // }\n\n  // private createInput(name: string, value: string ) {\n  //   const input = document.createElement(\"input\");\n  //   input.type = \"hidden\";\n  //   input.name = name;\n  //   input.value = value;\n  //   return input;\n  // }\n}\n\nexport default BuySubscriptionController\n","import React from \"react\";\nimport config from \"../core/config/config\";\nimport domainRouter from \"./domainRouter\";\nimport MainRoutes from \"./MainRoutes\";\nimport CodeRoutes from \"./CodeRoutes\";\nimport CorporativeRoutes from \"./CorporativeRoutes\";\nimport PromoRoutes from \"./PromoRoutes\";\nimport { YMInitializer } from 'react-yandex-metrika';\n\ninterface IProps {\n  className?: string;\n}\n\nconst SCREENS = {\n  [config.giftRoute]: MainRoutes,\n  [config.codeRoute]: CodeRoutes,\n  [config.corpRoute]: CorporativeRoutes,\n  [config.promoRoute]: PromoRoutes,\n}\n\n// const YM_ACCOUNTS = {\n//   'podarok.prostoapp.ru': [86989752],\n//   'prosto-meditation.ru': [94588675],\n//   'corp.prostoapp.ru': [92179976],\n// }\n\nexport const ymOptions = {\n  clickmap: true,\n  trackLinks: true,\n  accurateTrackBounce: true,\n  webvisor: true,\n  trackHash: true\n}\n\nconst DomainRoutes: React.FC<IProps> = ({ className }) => {\n  const Screen = SCREENS[domainRouter.currentHost];\n  /* @ts-ignore */\n  // const yandexMetrikaCounters = YM_ACCOUNTS[domainRouter.currentHost] || [];\n  // console.log('yandexMetrikaCounters', yandexMetrikaCounters)\n  // console.log('domainRouter.currentHost', domainRouter.currentHost)\n  return (\n    <div className={className}>\n      {/* <YMInitializer accounts={yandexMetrikaCounters} options={ymOptions} version=\"2\" /> */}\n      {/* {domainRouter.currentHost === 'podarok.prostoapp.ru' &&\n        <YMInitializer accounts={[86989752]} options={{ webvisor: true, trackHash: true }} version=\"2\" />\n      }\n      {domainRouter.currentHost === 'prosto-meditation.ru' &&\n        <YMInitializer accounts={[94588675]} options={{ webvisor: true, trackHash: true }} version=\"2\" />\n      } */}\n      {Screen ? <Screen /> : <MainRoutes />}\n    </div>\n  );\n};\n\nexport default DomainRoutes;\n","import React from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport BuySubscription from '../screens/BuySubscription/BuySubscription';\nimport CodeActivated from '../screens/CodeActivated/CodeActivated';\n\nconst PromoRoutes: React.FC = () => {\n\n  return (\n    <div>\n      <Switch>\n        <Route\n          exact path='/'\n          component={BuySubscription}\n        />\n        <Route\n          path='/activated'\n          component={CodeActivated}\n        />\n      </Switch>\n    </div>\n  );\n}\n\nexport default PromoRoutes;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport {\n  BrowserRouter as Router,\n} from \"react-router-dom\";\nimport DomainRoutes from \"./navigation/DomainRoutes\";\nimport './index.css';\n\nReactDOM.render(\n  <Router>\n    <React.StrictMode>\n      {/* <YMInitializer accounts={[86989752]} options={{webvisor: true, trackHash: true}} version=\"2\" /> */}\n      <DomainRoutes className=\"App\" />\n    </React.StrictMode>\n  </Router>,\n  document.getElementById('root')\n);\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"CalculatorBlock\":\"CorporateCalculator_CalculatorBlock__3eJnk\",\"CalculatorTitleContainer\":\"CorporateCalculator_CalculatorTitleContainer__2SxZV\",\"PhoneInput\":\"CorporateCalculator_PhoneInput__3NKQ7\",\"CalculatorTitle\":\"CorporateCalculator_CalculatorTitle__39Fys\",\"Email\":\"CorporateCalculator_Email__1PqlM\",\"PromoCodeInput\":\"CorporateCalculator_PromoCodeInput__3cx_S\",\"CalculatorAdditionalText\":\"CorporateCalculator_CalculatorAdditionalText__d3NTC\",\"CalculatorText\":\"CorporateCalculator_CalculatorText__1Wch1\",\"CalculatorText2x\":\"CorporateCalculator_CalculatorText2x__2Ww70\",\"CalculatorBottomBlock\":\"CorporateCalculator_CalculatorBottomBlock__3logH\",\"CalculatorBottomLeftBlock\":\"CorporateCalculator_CalculatorBottomLeftBlock__2dHQ1\",\"CalculatorBottomRightBlock\":\"CorporateCalculator_CalculatorBottomRightBlock__YKlbq\",\"CalculatorTextFirst\":\"CorporateCalculator_CalculatorTextFirst__3ryaw\",\"CalculatorTextSecond\":\"CorporateCalculator_CalculatorTextSecond__1j4Sl\",\"CalculatorOffer\":\"CorporateCalculator_CalculatorOffer__49il9\",\"CalculatorLink\":\"CorporateCalculator_CalculatorLink__1gf6F\",\"CalculatorFooter\":\"CorporateCalculator_CalculatorFooter__3DUg7\",\"CalculatorBottomRightBlockText\":\"CorporateCalculator_CalculatorBottomRightBlockText__2quJl\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"ManagerScreen\":\"ManagerScreen_ManagerScreen__17mBw\",\"AppIcon\":\"ManagerScreen_AppIcon__W634N\",\"ManagerIcon\":\"ManagerScreen_ManagerIcon__2QmZE\",\"TitleText\":\"ManagerScreen_TitleText__3I3Ro\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Root\":\"CorporateRadio_Root__2l1fW\",\"RadioItem\":\"CorporateRadio_RadioItem__UNlcq\",\"RadioInput\":\"CorporateRadio_RadioInput__V-HJk\",\"Text\":\"CorporateRadio_Text__1tHoO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"UpperMainRoot\":\"default_UpperMainRoot__2Idg1\",\"MainBlock\":\"default_MainBlock__3uZ8s\",\"ProstoAppIcon\":\"default_ProstoAppIcon__3ljWc\",\"BackgroundImage\":\"default_BackgroundImage__NxpsI\",\"MainTitle\":\"default_MainTitle__2VDUe\",\"AdditionalText\":\"default_AdditionalText__3RUhe\",\"MainContainer\":\"default_MainContainer__AR9Vc\",\"TextContainer\":\"default_TextContainer__36UL7\",\"LeftTextContainer\":\"default_LeftTextContainer__2kWLy\",\"HowItWorks\":\"default_HowItWorks__fQqpm\",\"BackgroundImageContainer\":\"default_BackgroundImageContainer__1GHyf\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"UpperMainRoot\":\"pink_UpperMainRoot__2O-OP\",\"MainBlock\":\"pink_MainBlock__1KfuH\",\"ProstoAppIcon\":\"pink_ProstoAppIcon__1dd1c\",\"TimerText\":\"pink_TimerText__2PmRj\",\"CustomButton\":\"pink_CustomButton__38L-w\",\"BackgroundImage\":\"pink_BackgroundImage__1wzE3\",\"MainTitle\":\"pink_MainTitle__2gVdF\",\"AdditionalText\":\"pink_AdditionalText__36b2O\",\"MainContainer\":\"pink_MainContainer__28vLb\",\"TextContainer\":\"pink_TextContainer__ajDmr\",\"LeftTextContainer\":\"pink_LeftTextContainer__2OSvv\",\"HowItWorks\":\"pink_HowItWorks__2aKc5\",\"AppIcon\":\"pink_AppIcon__2N8kx\",\"CertificatesTitleImage\":\"pink_CertificatesTitleImage__1O-7D\",\"CertificateTitleText\":\"pink_CertificateTitleText__2rXtG\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"UpperMainRoot\":\"black_UpperMainRoot__2L9hW\",\"MainBlock\":\"black_MainBlock__2xbZe\",\"ProstoAppIcon\":\"black_ProstoAppIcon__3vVbe\",\"Timer\":\"black_Timer__1uKk4\",\"TimerText\":\"black_TimerText__3drlK\",\"LeftTextContainer\":\"black_LeftTextContainer__5kxYw\",\"WavesBackground\":\"black_WavesBackground__p5Vqi\",\"BackgroundImage\":\"black_BackgroundImage__2NF6-\",\"MainTitle\":\"black_MainTitle__sqLjx\",\"MainSubtitle\":\"black_MainSubtitle__3ZNy0\",\"AdditionalText\":\"black_AdditionalText__JEyDi\",\"MainContainer\":\"black_MainContainer__FJeH1\",\"TextContainer\":\"black_TextContainer__32jdA\",\"HowItWorks\":\"black_HowItWorks__3UbDo\",\"MobileTitle\":\"black_MobileTitle__2ZPoR\",\"PayButton\":\"black_PayButton__F5163\",\"CertificateTitleText\":\"black_CertificateTitleText__1Oer3\",\"TitleTextBottom\":\"black_TitleTextBottom__fd4oG\",\"BackgroundImageContainer\":\"black_BackgroundImageContainer__KWnAG\",\"CalculatorSubitle\":\"black_CalculatorSubitle__3I1fE\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Root\":\"UpperCorporateBlock_Root__1jeU2\",\"MainBlock\":\"UpperCorporateBlock_MainBlock__3BrFC\",\"ProstoAppIcon\":\"UpperCorporateBlock_ProstoAppIcon__33dBO\",\"BackgroundImage\":\"UpperCorporateBlock_BackgroundImage__2PjJS\",\"MainTitle\":\"UpperCorporateBlock_MainTitle__3Y8JK\",\"AdditionalText\":\"UpperCorporateBlock_AdditionalText__1CFeY\",\"MainContainer\":\"UpperCorporateBlock_MainContainer__fAesJ\",\"TextContainer\":\"UpperCorporateBlock_TextContainer__ckX1m\",\"LeftTextContainer\":\"UpperCorporateBlock_LeftTextContainer__1qsMI\",\"HowItWorks\":\"UpperCorporateBlock_HowItWorks__2rE3A\",\"BackgroundImageContainer\":\"UpperCorporateBlock_BackgroundImageContainer__IPK9D\"};"],"sourceRoot":""}