{"version":3,"file":"static/chunks/9151.2d565aa090cbc56e.js","mappings":"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","sources":["webpack://_N_E/./src/features/payments-abn/components/InfoHint/styled.ts","webpack://_N_E/./src/features/payments-abn/components/InfoHint/index.tsx","webpack://_N_E/./src/features/payments-abn/components/WriteOffDetail/TooltipText/styled.ts","webpack://_N_E/./src/features/payments-abn/components/WriteOffDetail/TooltipText/index.tsx","webpack://_N_E/./src/features/payments-abn/components/WriteOffDetail/styled.ts","webpack://_N_E/./src/features/payments-abn/components/WriteOffDetail/index.tsx","webpack://_N_E/./src/features/payments-abn/store/selectors/selectBonusHint.ts","webpack://_N_E/./src/features/payments-abn/store/selectors/selectBonusText.ts","webpack://_N_E/./src/features/payments-abn/components/PaymentForms/components/BonusesPayment/BonusesDetail/index.tsx","webpack://_N_E/./src/features/payments-abn/components/PaymentForms/components/BonusesPayment/styled.ts","webpack://_N_E/./src/features/payments-abn/components/PaymentForms/components/BonusesPayment/BonusesPaymentForm.tsx","webpack://_N_E/./src/features/payments-abn/components/PaymentForms/components/BonusesPayment/useBonusesPayment.ts","webpack://_N_E/./src/features/payments-abn/components/PaymentForms/components/BonusesPayment/index.tsx","webpack://_N_E/./src/features/payments-abn/components/PaymentForms/components/ConnectAutoPay/index.tsx","webpack://_N_E/./src/features/payments-abn/components/PaymentForms/components/PaymentSumInput/styled.ts","webpack://_N_E/./src/features/payments-abn/components/PaymentForms/components/PaymentSumInput/index.tsx","webpack://_N_E/./src/features/payments-abn/components/PaymentForms/components/PaymentSumInput/helpers/getInputSumErrorMessage.ts","webpack://_N_E/./src/features/payments-abn/components/PaymentForms/PaymentFieldWrapper/index.tsx","webpack://_N_E/./src/features/payments-abn/components/PaymentForms/TwoFieldWrapper/index.tsx","webpack://_N_E/./src/features/payments-abn/components/CardPayment/CardPaymentForm/index.tsx","webpack://_N_E/./src/features/payments-abn/components/PaymentForms/components/BonusesPayment/BonusesPayButton/index.tsx","webpack://_N_E/./src/features/payments-abn/components/PaymentForms/components/BonusesPayment/useSendBonusesPayment.ts","webpack://_N_E/./src/features/payments-abn/components/PaymentForms/components/PhoneInput/styled.ts","webpack://_N_E/./src/features/payments-abn/components/PaymentForms/components/PhoneInput/index.tsx","webpack://_N_E/./src/features/payments-abn/components/SberPay/SberPayButton/styled.ts","webpack://_N_E/./src/features/payments-abn/components/SberPay/SberPayButton/index.tsx","webpack://_N_E/./src/features/payments-abn/components/SberPay/SberPayInstruction/styled.ts","webpack://_N_E/./src/features/payments-abn/components/SberPay/SberPayInstruction/index.tsx","webpack://_N_E/./src/features/payments-abn/components/SberPay/SberPayResultPopup/formatPhone.ts","webpack://_N_E/./src/features/payments-abn/components/SberPay/SberPayResultPopup/SberPayErrorPopup.tsx","webpack://_N_E/./src/features/payments-abn/components/SberPay/SberPayResultPopup/styled.ts","webpack://_N_E/./src/features/payments-abn/components/SberPay/SberPayResultPopup/SberPaySuccessPopup.tsx","webpack://_N_E/./src/features/payments-abn/components/SberPay/useSberPayTab.tsx","webpack://_N_E/./src/features/payments-abn/components/SberPay/index.tsx","webpack://_N_E/./src/features/payments-abn/components/SberPay/useSberPayMethod.tsx","webpack://_N_E/./src/features/payments-abn/components/useSbpPayment/index.tsx","webpack://_N_E/./src/features/payments-abn/components/LoyaltyButton/styled.ts","webpack://_N_E/./src/features/payments-abn/components/LoyaltyButton/index.tsx","webpack://_N_E/./src/features/payments-abn/components/useSbpPayment/SbpInstruction/styled.ts","webpack://_N_E/./src/features/payments-abn/components/useSbpPayment/SbpInstruction/index.tsx","webpack://_N_E/./src/features/payments-abn/components/useSbpPayment/styled.ts","webpack://_N_E/./src/features/payments-abn/components/useSbpPayment/desktopSbp.tsx","webpack://_N_E/./src/features/payments-abn/components/useSbpPayment/mobileSbp.tsx","webpack://_N_E/./src/features/payments-abn/components/useSbpPayment/SbpPaymentDetail.tsx","webpack://_N_E/./src/features/payments-abn/hooks/useSendPayBonuses.ts","webpack://_N_E/./src/features/payments-abn/components/PaymentBlock/index.tsx","webpack://_N_E/./src/features/payments-unauth-abn/types.tsx","webpack://_N_E/./src/features/payments-unauth-abn/components/PaymentType/styled.ts","webpack://_N_E/./src/features/payments-unauth-abn/components/PaymentType/index.tsx","webpack://_N_E/./src/features/payments-unauth-abn/styled.ts","webpack://_N_E/./src/features/payments-unauth-abn/index.tsx","webpack://_N_E/../../packages/ui-react/src/components/svg/arrows/ImportSquare.tsx","webpack://_N_E/./src/features/payments-abn/components/MobileAppPopup/analytics.ts","webpack://_N_E/./src/features/payments-abn/components/MobileAppPopup/index.tsx","webpack://_N_E/./src/features/payments-abn/components/PaymentType/styled.ts","webpack://_N_E/./src/features/payments-abn/components/PaymentType/index.tsx","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/ConnectButton/index.tsx","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/popups/styled.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/popups/index.tsx","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/popups/ConnectionSuccess.tsx","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/popups/ConnectionPaid.tsx","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/popups/ConnectionError.tsx","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/popups/PaymentDeclined.tsx","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/popups/QrFetchingError.tsx","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/popups/HowItWorks.tsx","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/hooks/useSbpHint.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/LoyaltySection/index.tsx","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/hooks/useLoyaltyHint.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/SbpPayment/Desktop/styled.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/SbpPayment/Desktop/index.tsx","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/SbpPayment/index.tsx","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/TicketDetails/LoadingPaySumSkeleton.tsx","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/TicketDetails/styled.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/TicketDetails/index.tsx","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/Ticket/index.tsx","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/TicketsList/styled.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/components/TicketsList/index.tsx","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/hooks/useSlider.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/hooks/useTicketHint.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/styled.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/index.tsx","webpack://_N_E/./src/features/payments-abn/components/SpecialOffer/SpecialOfferPopup.tsx","webpack://_N_E/./src/features/payments-abn/components/SpecialOffer/useLabelAbnTest.ts","webpack://_N_E/./src/features/payments-abn/components/SpecialOffer/index.tsx","webpack://_N_E/./src/features/payments-abn/hooks/usePaymentResult.ts","webpack://_N_E/./src/features/payments-abn/index.tsx","webpack://_N_E/./src/features/payments-unauth-abn/components/PaymentBanner/styled.ts","webpack://_N_E/./src/features/payments-unauth-abn/components/PaymentBanner/index.tsx","webpack://_N_E/./src/features/specialOffersContainer/containers/popups/LkPromotionalPopupExtra/styled.ts","webpack://_N_E/./src/features/specialOffersContainer/containers/popups/LkPromotionalPopupExtra/index.tsx","webpack://_N_E/./src/features/specialOffersContainer/containers/popups/PromoConnectedPopup.tsx","webpack://_N_E/./src/features/specialOffersContainer/containers/popups/PromoConnectionPopup.tsx","webpack://_N_E/./src/features/specialOffersContainer/containers/popups/PromoErrorPopup.tsx","webpack://_N_E/./src/features/specialOffersContainer/containers/popups/PromoNeedPaymentPopup.tsx","webpack://_N_E/../../packages/api-domru/src/spec-offer/v1/spec-offers/set-phone/index.ts","webpack://_N_E/./src/features/specialOffersContainer/containers/popups/PromoNeedSetPhonePopup/styled.ts","webpack://_N_E/./src/features/specialOffersContainer/containers/popups/PromoNeedSetPhonePopup/index.tsx","webpack://_N_E/./src/helpers/city/index.js","webpack://_N_E/./src/helpers/hooks/usePrepareQueryData.tsx","webpack://_N_E/./src/helpers/phone/formatValueForPhoneWithSpaces.ts","webpack://_N_E/../../packages/api-domru/src/api-season-ticket/v1/season-ticket/flags/index.ts","webpack://_N_E/./src/store/actionCreators/wholesaleCheaper.ts","webpack://_N_E/./src/store/actions/wholesaleCheaper.ts","webpack://_N_E/./src/store/selectors/domain.ts","webpack://_N_E/../../packages/api-domru/src/api-profile/v1/unauth/contract-asterisked/index.ts","webpack://_N_E/../../packages/shared/src/guards/isSomeEnum.ts","webpack://_N_E/../../packages/shared/src/hooks/useModal.ts","webpack://_N_E/../../packages/ui-react/src/components/controls/Toggle/styled.ts","webpack://_N_E/../../packages/ui-react/src/components/controls/Toggle/index.tsx","webpack://_N_E/../../packages/ui-react/src/components/svg/money/TicketDiscount.tsx","webpack://_N_E/../../packages/ui-react/src/components/svg/money/WalletAdd.tsx","webpack://_N_E/../../packages/ui-react/src/components/typography/TextWrapper/index.ts","webpack://_N_E/./static/images/payments-abn/mobile-app-popup/desktop-banner.png","webpack://_N_E/./static/images/payments-abn/mobile-app-popup/desktop-banner.webp","webpack://_N_E/./static/images/payments-abn/mobile-app-popup/mobile-banner.png","webpack://_N_E/./static/images/payments-abn/mobile-app-popup/mobile-banner.webp","webpack://_N_E/./static/images/payments-abn/stopper/spec-offer-with-label-mobile.png","webpack://_N_E/./static/images/payments-abn/stopper/spec-offer-with-label-mobile.webp","webpack://_N_E/./static/images/payments-abn/stopper/spec-offer-with-label.png","webpack://_N_E/./static/images/payments-abn/stopper/spec-offer-with-label.webp","webpack://_N_E/./static/images/payments-abn/stopper/spec-offer.png","webpack://_N_E/./static/images/payments-abn/stopper/spec-offer.webp","webpack://_N_E/./static/images/payments-abn/stopper/stopper-desktop-bg.png","webpack://_N_E/./static/images/payments-abn/stopper/stopper-desktop-bg.webp","webpack://_N_E/./static/images/payments-abn/stopper/stopper-mobile-bg.png","webpack://_N_E/./static/images/payments-abn/stopper/stopper-mobile-bg.webp","webpack://_N_E/../../node_modules/uuid/index.js","webpack://_N_E/../../node_modules/uuid/lib/bytesToUuid.js","webpack://_N_E/../../node_modules/uuid/lib/rng-browser.js","webpack://_N_E/../../node_modules/uuid/v1.js","webpack://_N_E/../../node_modules/uuid/v4.js"],"sourcesContent":["import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nimport type { THintType } from './index';\n\nexport const HintWrapper = styled.div<{ type: THintType, isLoading: boolean }>`\n flex-wrap: nowrap;\n width: 100%;\n align-items: center;\n padding: 24px;\n border-radius: ${BorderRadius.OuterBlockRadius};\n background-color: ${({ type }) => type === 'error' ? COLORS.BgError : COLORS.BgSurface};\n display: ${({ isLoading }) => isLoading ? 'block' : 'flex'};\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n padding: 12px 16px;\n border-radius: ${BorderRadius.componentRadius};\n }\n`;\n\nexport const HintIcon = styled.div`\n flex-shrink: 0;\n flex-basis: 24px;\n height: 24px;\n margin-right: 8px;\n\n svg {\n max-width: 100%;\n max-height: 100%;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n flex-basis: 16px;\n height: 16px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n align-self: flex-start;\n margin-top: 2px;\n }\n`;\n\nexport const HintMessage = styled.div`\n ${FONTS.S};\n color: ${COLORS.TextSecondary};\n white-space: pre-line;\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n ${FONTS.XS};\n }\n`;\n","import { useSelector } from 'react-redux';\n\nimport { WithSkeleton } from '@r1-frontend/ui-react/components/loaders/Skeleton';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\n\nimport { TState } from '~/src/store';\n\nimport * as ST from './styled';\n\nexport type THintType = 'info' | 'success' | 'error';\n\nexport interface IHintProps {\n hintType: THintType,\n hintMessage: string,\n}\n\nconst InfoHint = ({ hintType, hintMessage }: IHintProps): JSX.Element => {\n const paySumIsLoading = useSelector((state: TState) => state.seasonTicketPayment.paySumIsLoading);\n\n return (\n \n \n <>\n \n \n \n \n \n {hintMessage}\n \n \n \n );\n};\n\nexport default InfoHint;\n","import styled from 'styled-components';\n\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const List = styled.ul`\n padding-left: 24px;\n list-style: disc;\n color: ${COLORS.TextWhite};\n ${FONTS.XXS};\n\n span {\n display: block;\n }\n`;\n","import { Paragraph5 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { ListContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport * as ST from './styled';\n\nconst TooltipText = (): JSX.Element => {\n return (\n \n \n Из чего складывается сумма:\n \n \n
  • положительный остаток на балансе
  • \n
  • начисления по тарифу за текущий месяц
  • \n
  • начисления за всё, что не входит в тариф:\n подписки, пакеты каналов, рассрочка\n и аренда оборудования.\n Расчёт идёт с учётом срока абонемента —\n за 3, 6 или 12 месяцев\n
  • \n
  • остаток долга
  • \n
    \n
    \n );\n};\n\nexport default TooltipText;\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const DetailWrapper = styled.div`\n flex-direction: column;\n flex-wrap: nowrap;\n width: 100%;\n`;\n\nexport const DetailRow = styled.div`\n flex-wrap: nowrap;\n\n &:not(:last-child) {\n margin-bottom: 4px;\n }\n`;\n\nexport const PaymentInfo = styled.p`\n ${FONTS.S};\n color: ${COLORS.TextSecondary};\n display: flex;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.XS};\n\n &:last-child {\n margin-left: auto;\n }\n }\n`;\n\nexport const Separator = styled.div`\n flex: 1 1 auto;\n margin: 0 8px;\n border-bottom: 1px dashed ${COLORS.BgSecondary};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n display: none;\n }\n`;\n\nexport const IconWrap = styled.div`\n padding: 4px;\n cursor: pointer;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n padding: 2px;\n }\n`;\n","import { useState } from 'react';\n\nimport { InfoCircleFlip } from '@r1-frontend/ui-react/components/svg/main';\nimport { Cost } from '@r1-frontend/ui-react/experimental/purchase/cost';\nimport { WithTooltip } from '@r1-frontend/ui-react/experimental/tooltip';\n\nimport TooltipText from '~/src/features/payments-abn/components/WriteOffDetail/TooltipText';\n\nimport * as ST from './styled';\n\nexport interface IWriteOff {\n name: string,\n value: number,\n withTooltip?: boolean,\n}\n\ninterface IProps {\n writeOffs: IWriteOff[],\n}\n\nconst WriteOffDetail = ({ writeOffs }: IProps): JSX.Element | null => {\n const [isOpen, setIsOpen] = useState(false);\n\n if (!writeOffs.length) {\n return null;\n }\n\n return (\n \n {writeOffs.map(writeOff => (\n \n {writeOff.name}\n {writeOff.withTooltip &&\n setIsOpen(false)}\n content={}\n >\n setIsOpen(true)}\n role='button'\n >\n \n \n \n }\n \n \n \n {writeOff.value}\n \n \n ))}\n \n );\n};\n\nexport default WriteOffDetail;\n","import { getPluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { bonusPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\n\nimport { getIsAbnLoyaltyProgramEnabled } from '~/src/features/domru-bonus/constants/abnVariants';\nimport { IHintProps } from '~/src/features/payments-abn/components/InfoHint';\nimport { TState } from '~/src/store';\n\nconst bonus = getPluralize(bonusPluralize);\n\nconst isAbnProgramTermsEnabled = getIsAbnLoyaltyProgramEnabled();\n\n/**\n * Возвращает текст подсказки при списании бонусов\n */\nexport const selectBonusHint = (isTablet: boolean) => (state: TState): IHintProps | undefined => {\n const clientBonuses = state.loyalty.info.bonuses;\n const payment = state.payment;\n\n const { paymentData: { paymentSum, bonusesValue }, method: currentMethod, result: { isBonusesSuccess } } = payment;\n const methodType = currentMethod?.methodType;\n\n if (methodType === 'sbp' && isBonusesSuccess) {\n return {\n hintType: 'success',\n hintMessage: `Списали ${bonusesValue} ${bonus(bonusesValue)} с вашего счета.`,\n };\n }\n\n const requiredBonusesToPay = isAbnProgramTermsEnabled\n ? paymentSum / 0.2\n : paymentSum;\n\n if (bonusesValue > requiredBonusesToPay || bonusesValue > clientBonuses) {\n const currentBonusesQuantity = Math.min(requiredBonusesToPay, clientBonuses);\n\n const notMoreThanBonuses = ((currentBonusesQuantity === 1 || currentBonusesQuantity % 10 === 1) && currentBonusesQuantity !== 11)\n ? 'бонуса'\n : 'бонусов';\n\n return {\n hintType: 'error',\n hintMessage: `Можно списать не больше ${currentBonusesQuantity} ${notMoreThanBonuses}.`,\n };\n }\n\n if (bonusesValue === 0) {\n return {\n hintType: 'error',\n hintMessage: `Невозможно списать ${bonusesValue} ${bonus(bonusesValue)}. Введите любое другое количество от 1 до ${clientBonuses}. Если не хотите списывать бонусы, просто уберите галочку.`,\n };\n }\n\n if (methodType === 'sbp' && paymentSum - bonusesValue > 0) {\n const hintMessage = isTablet\n ? 'Когда вы нажмёте «Оплатить», сначала мы спишем бонусы, а когда вы подтвердите платёж в мобильном приложении вашего банка, спишем и деньги.'\n : 'Когда вы нажмёте «Показать QR-код», сначала мы спишем бонусы, а когда отсканируете его, спишем и деньги.';\n\n return {\n hintType: 'info',\n hintMessage,\n };\n }\n};\n","import { getIsAbnLoyaltyProgramEnabled } from '~/src/features/domru-bonus/constants/abnVariants';\nimport { selectPaymentSum } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/selectors/selectPaymentSum';\nimport { IWriteOff } from '~/src/features/payments-abn/components/WriteOffDetail';\nimport { EPaymentTypeIds } from '~/src/features/payments-abn/store/actionCreators';\nimport { TState } from '~/src/store';\n\nconst isAbnProgramTermsEnabled = getIsAbnLoyaltyProgramEnabled();\n\n/**\n * Возвращает текст информации при списании бонусов\n */\nexport const selectBonusText = (state: TState): IWriteOff[] => {\n const payment = state.payment;\n const { paymentTypeId, paymentData: { bonusesValue, isUseBonuses } } = payment;\n\n const selectedTicket = state.seasonTicketPayment.seasonTicket;\n const { isUseBonuses: isUseBonusesSeasonTicket, amount: amountBonuses } = state.seasonTicketPayment.bonusesInfo;\n const isSeasonTicketPay = paymentTypeId === EPaymentTypeIds.WHOLESALE;\n\n const loyalty = state.loyalty;\n const { availability: { isRegistered } } = loyalty;\n\n const currentPaySum = selectPaymentSum(state);\n\n const baseWriteOffs: IWriteOff[] = [{\n name: 'Списать с карты',\n value: currentPaySum,\n withTooltip: true,\n }];\n\n const _isUseBonuses = isSeasonTicketPay ? isUseBonusesSeasonTicket : isUseBonuses;\n const _bonuses = isSeasonTicketPay\n ? amountBonuses\n : Math.round(bonusesValue * (isAbnProgramTermsEnabled ? 0.2 : 1) * 100) / 100;\n\n if (isRegistered && !!_bonuses && _isUseBonuses) {\n baseWriteOffs.splice(-1, 0, {\n name: 'Списать бонусами:',\n value: _bonuses,\n });\n }\n\n if (isSeasonTicketPay && selectedTicket) {\n const ticketInfo = {\n name: 'Абонемент:',\n value: selectedTicket.sumPrice,\n };\n\n baseWriteOffs.unshift(ticketInfo);\n }\n\n return baseWriteOffs;\n};\n","import { useMemo } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { useMatchMedia } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { getIsAbnLoyaltyProgramEnabled } from '~/src/features/domru-bonus/constants/abnVariants';\nimport InfoHint from '~/src/features/payments-abn/components/InfoHint';\nimport WriteOffDetail from '~/src/features/payments-abn/components/WriteOffDetail';\nimport { selectBonusHint } from '~/src/features/payments-abn/store/selectors/selectBonusHint';\nimport { selectBonusText } from '~/src/features/payments-abn/store/selectors/selectBonusText';\nimport { TState } from '~/src/store';\n\n/**\n * Детализация информации о списании бонусов\n */\nconst BonusesDetail = (): JSX.Element | null => {\n const isTablet = useMatchMedia(`(max-width: ${wideBreakpoints.tablet})`);\n\n const {\n payment: { paymentData: { paymentSum, bonusesValue, isUseBonuses } },\n } = useSelector((state: TState) => state);\n\n const hintData = useSelector(selectBonusHint(isTablet));\n const writeOffs = useSelector(selectBonusText);\n\n const isWriteOffDetailShown = useMemo(\n () => getIsAbnLoyaltyProgramEnabled()\n ? !!bonusesValue && bonusesValue <= (paymentSum / 0.2)\n : !!bonusesValue && bonusesValue <= paymentSum,\n [bonusesValue, paymentSum],\n );\n\n if (!isUseBonuses) {\n return null;\n }\n\n return (\n <>\n {isWriteOffDetailShown && (\n \n )}\n {hintData && }\n \n );\n};\n\nexport default BonusesDetail;\n","import styled from 'styled-components';\n\nimport InputSimple from '@r1-frontend/ui-react/components/inputSimple';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const Wrapper = styled.div`\n flex-direction: row;\n flex-wrap: nowrap;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n padding: 24px;\n border-radius: ${BorderRadius.OuterBlockRadius};\n background-color: ${COLORS.BgSurface};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n padding: 16px;\n border-radius: ${BorderRadius.componentRadius};\n flex-direction: column;\n flex-wrap: nowrap;\n width: 100%;\n align-items: baseline;\n gap: 12px;\n }\n`;\n\nexport const Label = styled.div`\n flex-direction: column;\n`;\n\nexport const Text = styled.p`\n ${FONTS.MediumS};\n color: ${COLORS.TextPrimary};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.MediumXS};\n }\n`;\n\nexport const Info = styled.p<{ isValid: boolean }>`\n ${FONTS.S};\n color: ${({ isValid }) => isValid ? COLORS.TextPrimary : COLORS.Error};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.XS};\n }\n`;\n\nexport const InputBonuses = styled(InputSimple)<{ disabled: boolean }>`\n position: relative;\n max-width: 120px;\n margin: 0;\n\n &:after {\n content: '';\n position: absolute;\n top: 12px;\n right: 16px;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background-image: url('/static/images/loyalty/loyalty-logo.png');\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n opacity: ${({ disabled }) => disabled ? .5 : 1};\n overflow: hidden;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n max-width: unset;\n width: 100%;\n }\n`;\n","import { useMemo } from 'react';\n\nimport BaseCheckbox from '@r1-frontend/ui-react/components/controls/baseCheckbox';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { RubleSymbol } from '@r1-frontend/ui-react/experimental/purchase/cost/Cost/RubleSymbol';\nimport { pluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { bonusPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { getIsAbnLoyaltyProgramEnabled } from '~/src/features/domru-bonus/constants/abnVariants';\n\nimport * as ST from './styled';\n\nexport interface IBonusesPaymentProps {\n availableBonuses: number,\n value: string | number,\n maxLength: string,\n isChecked: boolean,\n isDisabled: boolean,\n isValid: boolean,\n onToggle: () => void,\n onChange: (event: React.ChangeEvent) => void,\n onFocus?: (event: React.FocusEvent) => void,\n onBlur?: (event: React.FocusEvent) => void,\n}\n\n/**\n * Форма для оплаты бонусами\n */\nexport const BonusesPaymentForm = ({\n availableBonuses,\n value,\n maxLength,\n isChecked,\n isDisabled,\n isValid,\n onToggle,\n onChange,\n onFocus,\n onBlur,\n}: IBonusesPaymentProps): JSX.Element => {\n const isTablet = useMatchMediaByWidth(wideBreakpoints.mobile);\n const isAbnProgramTermsEnabled = useMemo(getIsAbnLoyaltyProgramEnabled, []);\n\n return (\n \n \n \n \n Списать бонусы ({isAbnProgramTermsEnabled\n ? <>100 бонусов = 20 {RubleSymbol}\n : <>1 бонус = 1 {RubleSymbol}\n })\n \n \n У вас {availableBonuses} {pluralize(availableBonuses, bonusPluralize)}\n \n \n \n \n \n );\n};\n","import { useEffect, useState } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { selectCardPaySum } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/selectors/selectPaymentSum';\nimport { fillBonusesValue } from '~/src/features/payments-abn/store/actionCreators';\nimport {\n calculateByUseBonuses,\n setBonusesValue,\n validateBonusesValue,\n} from '~/src/features/payments-abn/store/actions';\nimport { TState } from '~/src/store';\n\nimport { IBonusesPaymentProps } from './index';\n\nconst bonusesRegExp = /^[1-9]\\d*$/;\n\n/**\n * возвращает пропсы для формы оплаты бонусами\n * TODO форма используется также для оплаты абонементов. Обработчики для оплаты абонеметов отличаются, необходимо объединить их.\n */\nexport const useBonusesPayment = (): IBonusesPaymentProps => {\n const dispatch = useDispatch();\n\n const { availableBonuses, paymentData, showBonusesPayment } = useSelector((state: TState) => ({\n availableBonuses: state.loyalty.info.bonuses,\n paymentData: state.payment.paymentData,\n showBonusesPayment: state.loyalty.availability.isRegistered && state.auth.isAuth,\n }), shallowEqual);\n\n const cardPaymentSum = useSelector(selectCardPaySum);\n\n const { paymentSum, isUseBonuses, bonusesValue, isBonusesValueValid } = paymentData;\n const isOnlyBonusesPay = !cardPaymentSum && isUseBonuses && !!bonusesValue;\n const [bufferBonusesValue, setBufferBonusesValue] = useState('');\n const [isTouchedBonusInput, setIsTouchedBonusInput] = useState(false);\n\n useEffect(() => {\n setBufferBonusesValue(`${bonusesValue}`);\n }, [bonusesValue]);\n\n const onToggle = () => {\n dispatch(calculateByUseBonuses(isTouchedBonusInput));\n };\n\n const onFocus = (event: React.FocusEvent) => {\n if (event.target.value === '0') {\n setBufferBonusesValue('');\n }\n\n dispatch(validateBonusesValue(true));\n };\n\n const onChange = (event: React.ChangeEvent) => {\n !isTouchedBonusInput && setIsTouchedBonusInput(true);\n\n const { value } = event.target;\n\n if (!value) {\n setBufferBonusesValue('');\n } else if (bonusesRegExp.test(value)) {\n setBufferBonusesValue(value);\n dispatch(setBonusesValue(+value));\n dispatch(validateBonusesValue());\n }\n };\n\n const onBlur = (event: React.FocusEvent) => {\n if (!event.target.value) {\n setBufferBonusesValue('0');\n dispatch(fillBonusesValue(0));\n }\n };\n\n return ({\n showBonusesPayment,\n isOnlyBonusesPay,\n availableBonuses,\n value: bufferBonusesValue,\n maxLength: `${availableBonuses.toString().length}`,\n isChecked: isUseBonuses,\n isDisabled: !availableBonuses || !paymentSum,\n isValid: isBonusesValueValid,\n onToggle,\n onFocus,\n onChange,\n onBlur,\n });\n};\n","import BonusesDetail from './BonusesDetail';\nimport { BonusesPaymentForm } from './BonusesPaymentForm';\nimport { useBonusesPayment } from './useBonusesPayment';\n\nexport interface IBonusesPaymentProps {\n showBonusesPayment: boolean,\n isOnlyBonusesPay: boolean,\n availableBonuses: number,\n value: string | number,\n maxLength: string,\n isChecked: boolean,\n isDisabled: boolean,\n isValid: boolean,\n onToggle: () => void,\n onChange: (event: React.ChangeEvent) => void,\n onFocus?: (event: React.FocusEvent) => void,\n onBlur?: (event: React.FocusEvent) => void,\n}\n\n/**\n * Форма для оплаты бонусами (контейнер)\n */\nexport const BonusesPayment = (): JSX.Element | null => {\n const bonusesPaymentProps = useBonusesPayment();\n\n if (!bonusesPaymentProps.showBonusesPayment) {\n return null;\n }\n\n return (\n <>\n \n \n \n );\n};\n","import { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport BaseCheckbox from '@r1-frontend/ui-react/components/controls/baseCheckbox';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { BlockContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { toggleConnectAutoPayStatus } from '~/src/features/payments-abn/store/actionCreators';\nimport { TState } from '~/src/store';\n\n/**\n * Форма подключения автоплатежа\n */\nexport const ConnectAutoPay = (): JSX.Element | null => {\n const isTablet = useMatchMediaByWidth(wideBreakpoints.mobile);\n\n const dispatch = useDispatch();\n\n const { isConnectAutoPay, isDisabled, showAutoPay } = useSelector((state: TState) => ({\n isConnectAutoPay: state.payment.paymentData.isConnectAutoPay,\n isDisabled: state.payment.method?.methodType === 'new-card' && !state.payment.isSaveCard,\n showAutoPay: state.auth.isAuth && !state.payment.method?.isAutoPayConnected,\n }), shallowEqual);\n\n const toggleConnectAutoPay = () => {\n dispatch(toggleConnectAutoPayStatus(!isConnectAutoPay));\n };\n\n if (!showAutoPay) {\n return null;\n }\n\n return (\n \n \n Подключить автоплатёж\n \n \n );\n};\n","import styled from 'styled-components';\n\nimport InputSimple from '@r1-frontend/ui-react/components/inputSimple';\n\nexport const InputWithRubleSymbol = styled(InputSimple)`\n margin: 0;\n position: relative;\n\n &:after {\n content: '';\n position: absolute;\n top: 50%;\n right: 16px;\n width: 24px;\n height: 24px;\n background-image: url('/static/images/payments-abn/ruble.svg');\n background-size: contain;\n background-position: center;\n background-repeat: no-repeat;\n transform: translateY(-50%);\n }\n\n & > p {\n position: absolute;\n left: 0;\n top: 100%;\n }\n`;\n","import { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { FullWidthListContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport {\n EValidityStatus,\n fillPaymentSum,\n setCardPaymentSum,\n} from '~/src/features/payments-abn/store/actionCreators';\nimport {\n setPaymentSum,\n validatePaymentSum,\n} from '~/src/features/payments-abn/store/actions';\nimport { TState } from '~/src/store';\n\nimport { getInputSumErrorMessage } from './helpers/getInputSumErrorMessage';\n\nimport { InputWithRubleSymbol } from './styled';\n\nconst sumRegExp = /^(0|[1-9]\\d*)(\\.\\d{0,2})?$/;\n\n/**\n * Форма ввода суммы оплаты\n */\nexport const PaymentSumInput = (): JSX.Element => {\n const dispatch = useDispatch();\n\n const { paymentSum, paymentSumValidity } = useSelector((state: TState) => state.payment.paymentData);\n\n const [bufferSumValue, setBufferSumValue] = useState('');\n\n useEffect(() => {\n setBufferSumValue(`${paymentSum}`);\n }, [paymentSum]);\n\n useEffect(() => {\n dispatch(setCardPaymentSum(paymentSum));\n }, [dispatch, paymentSum]);\n\n const dispatchValue = (value: number) => {\n dispatch(setPaymentSum(value));\n dispatch(validatePaymentSum());\n };\n\n const onFocusSumHandler = (event: React.FocusEvent) => {\n if (event.target.value === '0') {\n setBufferSumValue('');\n }\n\n dispatch(validatePaymentSum({\n isValid: EValidityStatus.IS_VALID,\n }));\n };\n\n const onChangeSumHandler = (event: React.ChangeEvent) => {\n const { value } = event.target;\n\n if (!value) {\n setBufferSumValue('');\n dispatchValue(0);\n } else if (sumRegExp.test(value)) {\n setBufferSumValue(value);\n dispatchValue(+value);\n }\n };\n\n const onBlurSumHandler = (event: React.FocusEvent) => {\n if (!event.target.value) {\n setBufferSumValue('0');\n dispatch(fillPaymentSum(0));\n }\n };\n\n const inpuSumErrorMessage = getInputSumErrorMessage(paymentSumValidity);\n\n return (\n \n Сумма пополнения\n \n \n );\n};\n","import { RubleSymbol } from '@r1-frontend/ui-react/experimental/purchase/cost/Cost/RubleSymbol';\nimport { NBSP } from '@r1-frontend/ui-react/tokens/symbols';\n\nimport { EValidityStatus, TPaymentSumValidity } from '~/src/features/payments-abn/store/actionCreators';\nimport { toCurrency } from '~/src/helpers/numbers';\n\n/**\n * Возвращает текст ошибки для введенной суммы платежа\n */\nexport const getInputSumErrorMessage = (paymentSumValidity: TPaymentSumValidity) :string => {\n const baseText = 'Сумма платежа должна быть';\n\n switch (paymentSumValidity.isValid) {\n case EValidityStatus.IS_LOWER_BOUND_ERROR:\n return `${baseText} не меньше ${toCurrency(paymentSumValidity.minPaymentSum)}${NBSP}${RubleSymbol}`;\n case EValidityStatus.IS_UPPER_BOUND_ERROR:\n return `${baseText} не больше ${toCurrency(paymentSumValidity.maxPaymentSum)}${NBSP}${RubleSymbol}`;\n case EValidityStatus.IS_VALID:\n default:\n return '';\n }\n};\n","import React from 'react';\n\nimport { FullWidthListContainer } from '@r1-frontend/ui-react/experimental/containers';\n\ninterface IProps {\n children: React.ReactNode,\n}\n/**\n * Враппер для элементов формы оплаты\n * Позволяет раположить элементы согласно дизайну\n */\nexport const PaymentFieldWrapper = ({ children }: IProps): JSX.Element => {\n return (\n \n {children}\n \n );\n};\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { FullWidthListContainer } from '@r1-frontend/ui-react/experimental/containers';\n\nconst StyledContainer = styled(FullWidthListContainer)`\n flex-direction: row;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n flex-direction: column;\n }\n\n > * {\n flex: 1;\n }\n`;\n/**\n * Враппер для двух компонентов формы, размещает компоненты в строку, на мобилке в столбец\n * компоненты должны иметь свойство \"flex: 1\"\n */\nexport const TwoFieldWrapper = ({ children }: { children: [JSX.Element, JSX.Element] }): JSX.Element => {\n return (\n \n {children}\n \n );\n};\n","import {\n BonusesPayment,\n ConnectAutoPay,\n EmailInput,\n PaymentFieldWrapper,\n PaymentSumInput,\n TwoFieldWrapper,\n} from '~/src/features/payments-abn/components/PaymentForms';\n\n/**\n * Форма для оплаты картой\n */\nexport const CardPaymentForm = (): JSX.Element => {\n return (\n \n \n \n \n \n\n \n\n \n \n );\n};\n","import styled from 'styled-components';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nconst BonusesButton = styled(Button)`\n color: ${COLORS.TextWhite};\n background-color: none;\n background: radial-gradient(63.45% 90.07% at 28.3% 105.36%, #ED3D3D 0%, rgba(237, 61, 61, 0) 100%),\n linear-gradient(105.23deg, #B9CF31 15.62%, #FA00FF 106.65%);\n\n &:hover {\n background-color: none;\n background: radial-gradient(63.45% 90.07% at 28.3% 105.36%, #ED3D3D 0%, rgba(237, 61, 61, 0) 100%),\n linear-gradient(105.23deg, #B9CF31 15.62%, #FA00FF 106.65%);\n opacity: .7;\n }\n`;\n\ninterface IProps {\n btnText: string,\n isDisable: boolean,\n onClick: () => void,\n}\n\n/**\n * Кнопка оплаты бонусами\n */\nexport const BonusesPayButton = ({ btnText, onClick, isDisable }: IProps) => {\n return (\n \n {btnText}\n \n );\n};\n","import { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport { IPayResponse, pay } from '@r1-frontend/api-domru/api-loyalty/v1/program/pay';\n\nimport { selectCardPaySum } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/selectors/selectPaymentSum';\nimport { IPaymentResult, setPaymentResult } from '~/src/features/payments-abn/store/actionCreators';\nimport { TState } from '~/src/store';\nimport { getLoyaltyInfo } from '~/src/store/actions/loyalty';\nimport selectProviderId from '~/src/store/selectors/selectProviderId';\n\n/**\n * Выполняет оплату бонусами\n */\nexport const useSendBonusesPayment = () => {\n const dispatch = useDispatch();\n const {\n payment: {\n paymentData: { isUseBonuses, bonusesValue },\n result,\n },\n providerId,\n } = useSelector((state: TState) => ({\n auth: state.auth,\n payment: state.payment,\n providerId: selectProviderId(state),\n }), shallowEqual);\n\n const cardPaymentSum = useSelector(selectCardPaySum);\n\n const isOnlyBonusesPay = !cardPaymentSum && isUseBonuses && !!bonusesValue;\n\n const sendBonusesPayment = async() => {\n if (!bonusesValue) {\n return;\n }\n\n const resp = await doRequest.apiLoyalty(\n pay(providerId, { bonusValue: bonusesValue }),\n );\n\n const respData: IPaymentResult = {\n ...result,\n isBonusesSuccess: resp.isSuccess,\n isOpenPopup: isOnlyBonusesPay,\n };\n dispatch(getLoyaltyInfo());\n dispatch(setPaymentResult(respData));\n };\n\n return {\n isOnlyBonusesPay,\n sendBonusesPayment,\n };\n};\n","import styled from 'styled-components';\n\nimport InputSimple, { phoneDecorator } from '@r1-frontend/ui-react/components/inputSimple';\n\nexport const InputPhone = styled(phoneDecorator(InputSimple))`\n margin-bottom: 0;\n`;\n","import { useCallback, useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { FullWidthListContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport { setPhone } from '~/src/features/payments-abn/store/actionCreators';\nimport { formatValueForPhoneWithSpaces } from '~/src/helpers/phone/formatValueForPhoneWithSpaces';\nimport { TState } from '~/src/store';\n\nimport * as ST from './styled';\n\nexport type TField = {\n value: string,\n isValid: boolean,\n}\n\nexport const INITIAL_SELECTED_VALUE = {\n value: '',\n label: '',\n isValid: false,\n isContactId: false,\n};\n\nconst EMPTY_CONTACT = {\n contactId: undefined,\n type: undefined,\n};\n\n/**\n * Поле ввода номера телефона\n */\nexport const PhoneInput = ({ ...rest }): JSX.Element => {\n const dispatch = useDispatch();\n const currentNumber = useSelector((state: TState) => state.payment.paymentData.phone);\n\n const [selected, setSelected] = useState(INITIAL_SELECTED_VALUE);\n\n const [isStartedToChange, setIsStartedToChange] = useState(false);\n\n useEffect(() => {\n if (selected.value.length === 11) {\n dispatch(setPhone(selected.value));\n } else if (currentNumber) {\n dispatch(setPhone(''));\n }\n }, [selected, isStartedToChange, currentNumber]);\n\n const updateValidation = useCallback((value?: string) => {\n if (!value) {\n setIsStartedToChange(false);\n return;\n }\n if (value && !isStartedToChange) {\n setIsStartedToChange(true);\n }\n }, [isStartedToChange]);\n\n const onChangePhone = useCallback((phoneData: TField) => {\n const label = formatValueForPhoneWithSpaces({ value: phoneData.value, label: '+7' });\n\n setSelected({\n ...EMPTY_CONTACT,\n ...phoneData,\n label,\n isContactId: false,\n });\n\n updateValidation(phoneData.value);\n }, [updateValidation]);\n\n return (\n \n Телефон, к которому привязан SberPay\n\n \n \n );\n};\n","import styled from 'styled-components';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\n\nexport const SberPayButton = styled(Button)`\n background-color: #21A038;\n\n &:hover {\n background-color: #25b33f;\n }\n`;\n\nexport const InnerWrap = styled.div`\n flex-wrap: nowrap;\n align-items: center;\n gap: 8px;\n`;\n","import * as ST from './styled';\n\ninterface IProps {\n isDisable: boolean,\n onClick: () => void,\n}\n\n/**\n * Кнопка оплаты СберПэй\n */\nexport const SberPayButton = ({ onClick, isDisable }: IProps) => {\n return (\n \n \n Оплатить\n \n \n \n \n \n );\n};\n","import styled from 'styled-components';\n\nexport const List = styled.ol`\n display: flex;\n flex-direction: column;\n list-style: decimal;\n padding-left: 17px;\n gap: 16px;\n`;\n\nexport const ListItem = styled.li`\n padding-left: 8px;\n`;\n","import {\n Body as AccordionBody,\n Header as AccordionHeader,\n Title as AccordionTitle,\n Wrapper as AccordionWrapper,\n} from '@r1-frontend/ui-react/components/accordions/Accordion';\nimport { TTheme } from '@r1-frontend/ui-react/components/accordions/Accordion/themes';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { H4 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\nimport { IndentContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\nimport { useModal } from '@r1-frontend/shared/hooks/useModal';\n\nimport * as ST from './styled';\n\nconst theme: TTheme = {\n border: COLORS.BgSurface,\n background: COLORS.BgSurface,\n radius: BorderRadius.InnerBlockRadius,\n padding: '24px',\n mobilePadding: '12px 16px',\n storyColor: COLORS.BgMain,\n color: COLORS.TextPrimary,\n\n colorArrow: COLORS.GRAY_DARK,\n colorArrowIsOpen: COLORS.GRAY_DARK,\n\n buttonType: 'secondary',\n\n backgroundIcon: COLORS.ButtonSecondary,\n borderIcon: COLORS.ButtonSecondary,\n backgroundIconIsOpen: COLORS.ButtonSecondary,\n borderIconIsOpen: COLORS.ButtonSecondary,\n};\n\n/**\n * Инструкция по оплате с помощью СберПэй\n */\nexport const SberPayInstruction = (): JSX.Element => {\n const isMobile = useMatchMediaByWidth(wideBreakpoints.mobile);\n\n const { isOpen, toggleModal: toggleAccordion } = useModal();\n\n return (\n \n \n \n \n

    Инструкция

    \n
    \n
    \n \n \n \n \n \n \n Введите номер телефона, к которому привязана карта СберБанка.\n \n \n \n \n \n Если у вас Android, откройте СберБанк Онлайн по ссылке из пуш-уведомления, которой придёт вам на смартфон.\n \n \n Если у вас iOS, откройте СберБанк Онлайн и нажмите на карточку Дом.ру над разделом «Кошелёк» на главном экране.\n \n \n \n \n \n Подтвердите оплату.\n \n \n \n \n \n \n );\n};\n","/**\n * Форматирует номер телефона вида 79228299999 в +7 922 829-99-99\n */\nexport const formatPhone = (p: string) => `+${p[0]} ${p.substring(1, 4)} ${p.substring(4, 7)}-${p.substring(7, 9)}-${p.substring(9, 11)}`;\n","import Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport DefaultPopup from '@r1-frontend/ui-react/components/popups/defaultPopup';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\nimport { IndentContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport { formatPhone } from './formatPhone';\n\ninterface IProps {\n phone: string,\n onClick: () => void,\n onClose: () => void,\n}\n\n/**\n * Попап с ошибкой регистрации платежа СберПэй\n */\nexport const SberPayErrorPopup = ({\n phone,\n onClick,\n onClose,\n}: IProps) => {\n return (\n \n \n \n

    Sber Pay

    \n \n Не смогли отправить вам пуш-уведомление на оплату
    по номеру {formatPhone(phone)}\n
    \n
    \n\n \n \n \n \n
    \n
    \n );\n};\n","import styled from 'styled-components';\n\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nexport const InlineBtn = styled.span`\n color: ${COLORS.Link};\n cursor: pointer;\n`;\n","import Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport DefaultPopup from '@r1-frontend/ui-react/components/popups/defaultPopup';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\nimport { IndentContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\nimport { formatPhone } from './formatPhone';\n\nimport { InlineBtn } from './styled';\n\ninterface IProps {\n phone: string,\n onClick: () => void,\n onClose: () => void,\n}\n\n/**\n * Попап с выводом результата регистрации платежа\n */\nexport const SberPaySuccessPopup = ({\n phone,\n onClick,\n onClose,\n}: IProps) => {\n return (\n \n \n \n

    Sber Pay

    \n \n Отправили вам ссылку на оплату: в пуш-уведомлении или в смс
    на номер {formatPhone(phone)}\n
    \n \n Не пришло уведомление? Отправить еще раз.\n \n
    \n\n \n \n \n
    \n
    \n );\n};\n","import { useDispatch } from 'react-redux';\n\nimport PaymentMethod, { IMethodData } from '@r1-frontend/ui-react/organisms/Payment/PaymentMethod';\n\nimport { addNewPayMethods } from '~/src/features/payments-abn/store/actions';\n\nconst sberpayMethod: IMethodData = {\n id: 'sberpay',\n methodType: 'sberpay',\n label: 'SberPay',\n value: 'sberpay',\n imagePath: '/static/images/payments-abn/pay-systems/sberpay.png',\n imageAlt: 'Логотип Сбера',\n isAutoPayConnected: true,\n};\n\n/**\n * Добавляет таб СберПэй к доступным методам оплаты\n */\nexport const useSberPayTab = (): void => {\n const dispatch = useDispatch();\n\n sberpayMethod.widget = PaymentMethod;\n\n dispatch(addNewPayMethods([sberpayMethod]));\n};\n","import { shallowEqual, useSelector } from 'react-redux';\n\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport { PolicyNote } from '@r1-frontend/ui-react/components/PolicyNote';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { FullWidthListContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { useModal } from '@r1-frontend/shared/hooks/useModal';\n\nimport { POLICY_PAGE_LINK } from '~/src/constants';\nimport {\n BonusesPayment,\n PaymentFieldWrapper,\n PaymentSumInput,\n TwoFieldWrapper,\n} from '~/src/features/payments-abn/components/PaymentForms';\nimport { BonusesPayButton } from '~/src/features/payments-abn/components/PaymentForms/components/BonusesPayment/BonusesPayButton';\nimport { useSendBonusesPayment } from '~/src/features/payments-abn/components/PaymentForms/components/BonusesPayment/useSendBonusesPayment';\nimport { PhoneInput } from '~/src/features/payments-abn/components/PaymentForms/components/PhoneInput';\nimport { TState } from '~/src/store';\n\nimport { SberPayButton } from './SberPayButton';\nimport { SberPayInstruction } from './SberPayInstruction';\nimport { SberPayErrorPopup, SberPaySuccessPopup } from './SberPayResultPopup';\nimport { useSberPayMethod } from './useSberPayMethod';\nimport { useSberPayTab } from './useSberPayTab';\n\n/**\n * Добавляет метод оплаты с помощью СберПэй\n */\nexport const SberPay = (): JSX.Element | null => {\n const {\n isAuth,\n showSberPay,\n phone,\n bonusesValue,\n } = useSelector((state: TState) => ({\n isAuth: state.auth.isAuth,\n showSberPay: state.payment.method?.methodType === 'sberpay',\n phone: state.payment.paymentData.phone,\n bonusesValue: state.payment.paymentData.bonusesValue,\n }), shallowEqual);\n\n const { isOpen: isOpenSuccess, openModal: openSuccessModal, closeModal: closeSuccessModal } = useModal();\n const { isOpen: isOpenError, openModal: openErrorModal, closeModal: closeErrorModal } = useModal();\n\n const { isOnlyBonusesPay, sendBonusesPayment } = useSendBonusesPayment();\n\n useSberPayTab();\n\n const { isValid, sendSberPay } = useSberPayMethod();\n\n const onSendSberPay = async() => {\n closeSuccessModal();\n closeErrorModal();\n\n sendBonusesPayment();\n\n const isSuccess = await sendSberPay();\n\n if (isSuccess) {\n openSuccessModal();\n } else {\n openErrorModal();\n }\n };\n\n if (!showSberPay) {\n return null;\n }\n\n return (\n <>\n \n

    Детали оплаты

    \n\n \n \n \n \n \n\n \n \n {!isOnlyBonusesPay &&\n \n }\n\n \n {!isAuth &&\n \n }\n \n {isOnlyBonusesPay\n ? \n : \n }\n \n \n
    \n\n {isOpenSuccess && !isOpenError &&\n \n }\n {isOpenError && !isOpenSuccess &&\n \n }\n \n );\n};\n","import { shallowEqual, useSelector } from 'react-redux';\n\nimport { doRequest } from '@r1-frontend/do-request/index';\nimport { makePaymentAuth, makePaymentUnauth } from '@r1-frontend/api-domru/api-pay/v1/payment/add';\nimport { IRegisterPayment } from '@r1-frontend/api-domru/api-pay/v1/payment/dto/IRegisterPayment';\n\nimport { selectCardPaySum } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/selectors/selectPaymentSum';\nimport { TState } from '~/src/store';\n\n/**\n * Возвращает метод для оплаты через СберПэй\n */\nexport const useSberPayMethod = () => {\n const {\n isAuth,\n providerId,\n phone,\n agreement,\n agreementEnc,\n paymentSum,\n } = useSelector((state: TState) => {\n const paymentSum = selectCardPaySum(state);\n\n return {\n isAuth: state.auth.isAuth,\n providerId: state.city.provider.providerId,\n phone: state.payment.paymentData.phone,\n agreement: state.payment.paymentData.agreement,\n agreementEnc: state.payment.paymentData.agreementEnc,\n paymentSum,\n };\n }, shallowEqual);\n\n const isValid = isAuth ? !!(phone && paymentSum) : !!(phone && paymentSum && (agreement || agreementEnc));\n const paymentSource = isAuth ? 2 : 1;\n\n const sendSberPay = async() => {\n if (!isValid) {\n return false;\n }\n\n const params: Record = {\n mobile_phone: phone,\n payment_value: paymentSum,\n payment_source: paymentSource,\n agreement_enc: agreementEnc,\n number_value: agreement,\n back2app: 1,\n };\n\n const resp = await doRequest.apiPay(\n isAuth ? makePaymentAuth(providerId, params) : makePaymentUnauth(providerId, params),\n );\n\n return resp.isSuccess && resp.payload.regStatus > 0;\n };\n\n return {\n isValid,\n sendSberPay,\n };\n};\n","import { useDispatch, useSelector } from 'react-redux';\n\nimport PaymentMethod, { IMethodData } from '@r1-frontend/ui-react/organisms/Payment/PaymentMethod';\n\nimport { addNewPayMethods } from '~/src/features/payments-abn/store/actions';\nimport { TState } from '~/src/store';\n\nconst sbpMethod: IMethodData = {\n id: 'sbp',\n methodType: 'sbp',\n label: 'СБП',\n value: 'sbp',\n imagePath: '/static/images/payments-abn/sbp.png',\n imageAlt: 'Логотип СБП',\n isAutoPayConnected: true,\n};\n\nexport const useSbpPayment = (): void => {\n const dispatch = useDispatch();\n const hasSbp = useSelector((state: TState) => state.city.currentCity.has_QPS);\n\n if (!hasSbp) {\n return;\n }\n\n sbpMethod.widget = PaymentMethod;\n\n dispatch(addNewPayMethods([sbpMethod]));\n};\n","import styled from 'styled-components';\n\nimport { BaseButton } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\n\n\nexport const PLButton = styled(BaseButton)`\n color: ${COLORS.TextWhite};\n background: radial-gradient(63.45% 90.07% at 28.3% 105.36%, #ED3D3D 0%, rgba(237, 61, 61, 0) 100%),\n linear-gradient(105.23deg, #B9CF31 15.62%, #FA00FF 106.65%);\n`;\n","import { btnSizes, btnTypes } from '@r1-frontend/ui-react/components/buttons/baseButton';\n\nimport { PLButton } from './styled';\n\ninterface IProps {\n isLoading: boolean,\n onPayHandler: () => void,\n}\n\nconst LoyaltyButton = ({ isLoading, onPayHandler }: IProps): JSX.Element => {\n\n return (\n \n );\n};\n\nexport default LoyaltyButton;\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const Instruction = styled.ol`\n display: flex;\n flex-direction: column;\n list-style: decimal;\n ${FONTS.S};\n color: ${COLORS.TextSecondary};\n padding-left: 17px;\n gap: 16px;\n`;\n\nexport const InstructionItem = styled.li`\n padding-left: 8px;\n`;\n\nexport const BankList = styled.div`\n flex-wrap: nowrap;\n margin-top: 8px;\n`;\n\nexport const BankItem = styled.div`\n width: 62px;\n height: 24px;\n margin-right: 4px;\n padding: 6px;\n border-radius: 4px;\n background-color: ${COLORS.BgMain};\n\n img {\n width: 100%;\n height: 100%;\n object-position: center;\n object-fit: contain;\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n &:last-of-type {\n display: none;\n }\n }\n`;\n\nexport const SbpLink = styled.a`\n width: 32px;\n height: 24px;\n border-radius: 4px;\n background-color: ${COLORS.BgMain};\n background-image: url('/static/images/icons/hDots.svg');\n background-size: 16px 4px;\n background-position: center;\n background-repeat: no-repeat;\n`;\n","import { pushDataLayer } from '~/src/features/payments-abn/helpers/pushDataLayer';\n\nimport * as ST from './styled';\n\nconst banksData = [\n {\n id: 'sber',\n name: 'Сбер',\n },\n {\n id: 'vtb',\n name: 'ВТБ',\n },\n {\n id: 'tinkoff',\n name: 'Тинькофф',\n },\n {\n id: 'alfa',\n name: 'Альфа Банк',\n },\n {\n id: 'raiffeisen',\n name: 'Райффайзен Банк',\n },\n];\n\nconst SbpInstruction = (): JSX.Element => {\n return (\n \n \n Откройте приложение вашего банка. Найдите кнопку «Оплатить по QR» или иконку QR-кода. Обычно их можно найти в разделе «Платежи».\n \n {banksData.map(bank => (\n \n \n \n ))}\n pushDataLayer('click payment by SBP', '')}\n target={'_blank'}\n rel='noopener noreferrer'\n />\n \n \n Нажмите на кнопку и наведите камеру смартфона на QR-код.\n Нажмите «Продолжить» и подтвердите платёж.\n \n );\n};\n\nexport default SbpInstruction;\n","import styled, { css } from 'styled-components';\n\nimport { BaseButton } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const QrBlock = styled.div`\n flex-wrap: nowrap;\n align-items: flex-start;\n padding: 24px;\n gap: 24px;\n border-radius: ${BorderRadius.OuterBlockRadius};\n background-color: ${COLORS.BgSurface};\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n display: none;\n }\n`;\n\nexport const QrSide = styled.div`\n padding: 15px;\n border: 1px solid ${COLORS.BgSubstrate};\n border-radius: ${BorderRadius.componentRadius};\n background-color: ${COLORS.BgMain};\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n padding: 14px;\n }\n`;\n\nexport const QrInner = styled.div`\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 176px;\n height: 176px;\n padding: 12px;\n border: 2px solid ${COLORS.Outline_Light};\n border-radius: 12px;\n background-color: transparent;\n\n & svg {\n max-width: 148px;\n max-height: 148px;\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n width: 162px;\n height: 162px;\n padding: 5px;\n }\n`;\n\nexport const ErrorMessage = styled.p`\n ${FONTS.XXS};\n color: ${COLORS.TextHint};\n margin-bottom: 12px;\n text-align: center;\n`;\n\nexport const SupportLink = styled.span`\n ${FONTS.MediumXXS};\n color: ${COLORS.Link};\n`;\n\nexport const QrButton = styled(BaseButton)`\n width: 100%;\n`;\n\nexport const InfoSide = styled.div`\n flex-direction: column;\n`;\n\nexport const InfoTitle = styled.h5`\n ${FONTS.H5};\n margin-bottom: 12px;\n`;\n\nexport const PayButton = styled(BaseButton)<{ isAuth: boolean }>`\n ${({ isAuth }) => isAuth && css`\n margin-top: 20px;\n `};\n`;\n","import { Dispatch, SetStateAction, useCallback, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { captureException } from '@sentry/node';\n\nimport { doRequest } from '@r1-frontend/do-request/index';\nimport { getQrCode } from '@r1-frontend/api-domru/api-pay/v1/qr/index';\nimport { getQrLink } from '@r1-frontend/api-domru/api-pay/v1/vtb-pay/qr-core';\nimport { IVtbPayQrCode } from '@r1-frontend/api-domru/api-pay/v1/vtb-pay/qr-core/dto/IVtbPayQrCode';\n\nimport { btnSizes, btnTypes } from '@r1-frontend/ui-react/components/buttons/baseButton';\n\nimport { selectCardPaySum } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/selectors/selectPaymentSum';\nimport { pushDataLayer } from '~/src/features/payments-abn/helpers/pushDataLayer';\nimport { setPaymentQrCode } from '~/src/features/payments-abn/store/actionCreators';\nimport { TState } from '~/src/store';\nimport { openChat } from '~/src/store/actions/chat';\n\nimport SbpInstruction from './SbpInstruction';\n\nimport * as ST from './styled';\n\ninterface IProps {\n providerId: number,\n userAgreement?: string,\n isDisabled: boolean,\n isLoadingQrData: boolean,\n setIsLoadingQrData: Dispatch>,\n onPayHandler: (reqAction: () => Promise) => void,\n}\n\nconst DesktopSbp = ({\n providerId,\n userAgreement = '',\n isDisabled,\n isLoadingQrData,\n onPayHandler,\n setIsLoadingQrData,\n}: IProps): JSX.Element => {\n const dispatch = useDispatch();\n const { sbpData: { qrCode } } = useSelector((state: TState) => state.payment);\n const cardPaymentSum = useSelector(selectCardPaySum);\n\n const [isQrCodeError, setIsQrCodeError] = useState(false);\n\n const fetchQrCode = useCallback(async() => {\n pushDataLayer('click on show qrcode', 'click qrcode');\n setIsLoadingQrData(true);\n\n try {\n const linkResponse = await doRequest.apiPay(\n getQrLink({ providerId, userAgreement, paySum: cardPaymentSum }),\n );\n\n if (!linkResponse.isSuccess) {\n throw new Error(linkResponse.error.message);\n }\n\n const _code = await doRequest.apiPay(\n getQrCode(providerId, linkResponse.payload.data.payload),\n );\n\n if (_code.isSuccess && _code?.payload) {\n dispatch(setPaymentQrCode(_code.payload));\n pushDataLayer('click on show qrcode', 'succes qrcode');\n } else {\n setIsQrCodeError(true);\n pushDataLayer('click on show qrcode', 'error qrcode');\n }\n\n } catch (error) {\n captureException(error);\n } finally {\n setIsLoadingQrData(false);\n }\n }, [setIsLoadingQrData, providerId, userAgreement, cardPaymentSum, dispatch]);\n\n return (\n \n {qrCode\n ? \n : \n {isQrCodeError && (\n \n Ошибка. Попробуйте снова или обратитесь в  dispatch(openChat())}>поддержку.\n \n )}\n onPayHandler(fetchQrCode)}\n />\n \n }\n \n Как оплатить через СБП\n \n \n \n );\n};\n\nexport default DesktopSbp;\n","import { Dispatch, SetStateAction, useCallback, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { captureException } from '@sentry/node';\n\nimport { doRequest } from '@r1-frontend/do-request/index';\nimport { IVtbPayQrCode } from '@r1-frontend/api-domru/api-pay/v1/vtb-pay/qr-core/dto/IVtbPayQrCode';\nimport { getQrLink } from '@r1-frontend/api-domru/api-pay/v1/vtb-pay/qr-core/index';\n\nimport { BaseButton, btnSizes, btnTypes } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { RubleSymbol } from '@r1-frontend/ui-react/experimental/purchase/cost/Cost/RubleSymbol';\n\nimport ResultPopup, { defaultPopupState } from '~/src/features/payments-abn/components/PopupResult';\nimport { selectCardPaySum } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/selectors/selectPaymentSum';\nimport { pushDataLayer } from '~/src/features/payments-abn/helpers/pushDataLayer';\nimport { setPaymentQrLink } from '~/src/features/payments-abn/store/actionCreators';\nimport { TState } from '~/src/store';\n\nimport { PayButton } from './styled';\n\ninterface IProps {\n providerId: number,\n userAgreement?: string,\n isDisabled: boolean,\n isLoadingQrData: boolean,\n setIsLoadingQrData: Dispatch>,\n onPayHandler: (reqAction: () => Promise) => void,\n}\n\nconst MobileSbp = ({\n providerId,\n userAgreement = '',\n isDisabled,\n isLoadingQrData,\n setIsLoadingQrData,\n onPayHandler,\n}: IProps): JSX.Element => {\n const dispatch = useDispatch();\n const {\n auth: { isAuth },\n payment: { paymentData: { paymentSum }, sbpData: { qrLink } },\n } = useSelector((state: TState) => state);\n\n const cardPaymentSum = useSelector(selectCardPaySum);\n\n const [popupState, setPopupState] = useState(defaultPopupState);\n\n const buttonText = useMemo(() => paymentSum ? `Оплатить ${paymentSum} ${RubleSymbol}` : 'Оплатить', [paymentSum]);\n\n const fetchQrLink = useCallback(async() => {\n if (popupState.isOpen) {\n setPopupState(defaultPopupState);\n }\n setIsLoadingQrData(true);\n\n try {\n const _link = await doRequest.apiPay(\n getQrLink({ providerId, userAgreement, paySum: cardPaymentSum }),\n );\n\n if (_link.isSuccess) {\n dispatch(setPaymentQrLink(_link.payload.data.payload));\n pushDataLayer('click on show qrcode', 'succes qrcode');\n } else {\n pushDataLayer('click on show qrcode', 'error qrcode');\n }\n\n return _link;\n } catch (error) {\n captureException(error);\n } finally {\n setIsLoadingQrData(false);\n }\n }, [providerId, cardPaymentSum, popupState.isOpen, setIsLoadingQrData, userAgreement, dispatch]);\n\n const onFetchQrLinkHandler = useCallback(async() => {\n const qrLinkResult = await fetchQrLink();\n\n if (!qrLinkResult?.isSuccess) {\n setPopupState({\n isOpen: true,\n title: 'Не удалось получить ссылку на оплату',\n actions: ,\n });\n }\n }, [fetchQrLink]);\n\n return (\n <>\n ({}) : () => onPayHandler(onFetchQrLinkHandler)}\n isLoading={isLoadingQrData}\n disabled={isDisabled}\n href={qrLink}\n target='_blank'\n rel='noopener noreferrer'\n isAuth={isAuth}\n />\n setPopupState(defaultPopupState)}/>\n \n );\n};\n\nexport default MobileSbp;\n","/* eslint-disable complexity */\nimport React, { useCallback, useMemo, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { captureException } from '@sentry/node';\n\nimport { BaseButton, btnSizes, btnTypes } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { PolicyNote } from '@r1-frontend/ui-react/components/PolicyNote';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { FullWidthListContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { useMatchMedia } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { POLICY_PAGE_LINK } from '~/src/constants';\nimport { BonusesPayment, PaymentFieldWrapper, PaymentSumInput } from '~/src/features/payments-abn/components/PaymentForms';\nimport { BonusesPayButton } from '~/src/features/payments-abn/components/PaymentForms/components/BonusesPayment/BonusesPayButton';\nimport { useSendBonusesPayment } from '~/src/features/payments-abn/components/PaymentForms/components/BonusesPayment/useSendBonusesPayment';\nimport ResultPopup, { defaultPopupState } from '~/src/features/payments-abn/components/PopupResult';\nimport { useSbpPayment } from '~/src/features/payments-abn/components/useSbpPayment';\nimport { useSendPayBonuses } from '~/src/features/payments-abn/hooks/useSendPayBonuses';\nimport { EValidityStatus, setPaymentResult, togglePayWithBonusesStatus } from '~/src/features/payments-abn/store/actionCreators';\nimport { TState } from '~/src/store';\nimport { getLoyaltyInfo } from '~/src/store/actions/loyalty';\n\nimport LoyaltyButton from '../LoyaltyButton';\n\nimport DesktopSbp from './desktopSbp';\nimport MobileSbp from './mobileSbp';\n\nconst SbpPaymentDetail = (): JSX.Element | null => {\n const dispatch = useDispatch();\n const {\n auth: { isAuth, clientPersonal },\n city: { provider: { providerId } },\n payment: { paymentData: { paymentSum, bonusesValue, isBonusesValueValid, isUseBonuses, paymentSumValidity, agreement, agreementEnc }, method, result },\n loyalty: { info: { bonuses } },\n } = useSelector((state: TState) => state);\n const { isOnlyBonusesPay, sendBonusesPayment } = useSendBonusesPayment();\n useSbpPayment();\n\n const { agreement: authAgreement } = clientPersonal || {};\n\n const isTablet = useMatchMedia(`(max-width: ${wideBreakpoints.tablet})`);\n\n const [isLoadingQrData, setIsLoadingQrData] = useState(false);\n const [popupState, setPopupState] = useState(defaultPopupState);\n\n const onSendPay = useSendPayBonuses();\n\n const onSendPayHandler = useCallback(async() => {\n if (popupState.isOpen) {\n setPopupState(defaultPopupState);\n }\n setIsLoadingQrData(true);\n\n try {\n const resp = await onSendPay();\n\n dispatch(setPaymentResult({ ...result, isBonusesSuccess: resp?.isSuccess }));\n dispatch(getLoyaltyInfo());\n return resp?.isSuccess;\n } catch (error) {\n captureException(error);\n } finally {\n setIsLoadingQrData(false);\n }\n }, [dispatch, onSendPay, popupState.isOpen, result]);\n\n const onPayWithoutBonuses = useCallback((reqAction?: () => Promise) => {\n if (popupState.isOpen) {\n setPopupState(defaultPopupState);\n }\n\n dispatch(togglePayWithBonusesStatus(false));\n\n reqAction && reqAction();\n }, [dispatch, popupState.isOpen]);\n\n const onPayHandler = useCallback(async(reqAction?: () => Promise) => {\n if (isUseBonuses) {\n const sendPayResult = await onSendPayHandler();\n\n if (sendPayResult) {\n reqAction && reqAction();\n } else {\n setPopupState({\n isOpen: true,\n title: 'Не удалось списать бонусы',\n actions: <>\n \n onPayWithoutBonuses(reqAction)}\n />\n ,\n });\n }\n } else {\n onPayWithoutBonuses(reqAction);\n }\n }, [onPayWithoutBonuses, onSendPayHandler, isUseBonuses]);\n\n const isShowLoyaltyButton = useMemo(() => {\n return isAuth && isUseBonuses && paymentSum > 0 && bonusesValue < bonuses && paymentSum === bonusesValue;\n }, [bonuses, isAuth, isUseBonuses, bonusesValue, paymentSum]);\n\n const hasAgreement = authAgreement || agreementEnc || agreement;\n const isBonusOk = isUseBonuses ? isBonusesValueValid : true;\n\n const commonProps = {\n providerId,\n userAgreement: `${agreementEnc || agreement || authAgreement}`,\n isDisabled: !isBonusOk || !paymentSum || paymentSumValidity.isValid !== EValidityStatus.IS_VALID || !hasAgreement,\n isLoadingQrData,\n onPayHandler,\n setIsLoadingQrData,\n };\n\n if (!(method?.methodType === 'sbp')) {\n return null;\n }\n\n return (\n \n

    Детали оплаты

    \n\n \n \n\n \n \n \n {!isAuth &&\n \n }\n {isShowLoyaltyButton\n ? \n : !isOnlyBonusesPay && (\n isTablet\n ? \n : \n )\n }\n {isOnlyBonusesPay && (\n \n \n \n )}\n \n setPopupState(defaultPopupState)} />\n
    \n );\n};\n\nexport default SbpPaymentDetail;\n","import { useCallback } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { captureException } from '@sentry/node';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport { IPayResponse, pay } from '@r1-frontend/api-domru/api-loyalty/v1/program/pay';\n\nimport { TState } from '~/src/store';\nimport { getClientAll } from '~/src/store/actions/auth/getClientAll';\nimport selectProviderId from '~/src/store/selectors/selectProviderId';\n\nexport const useSendPayBonuses = () => {\n const dispatch = useDispatch();\n\n const { bonusesValue } = useSelector((state: TState) => state.payment.paymentData);\n const providerId = useSelector(selectProviderId);\n\n return useCallback(async() => {\n try {\n const resp = await doRequest.apiLoyalty(\n pay(providerId, { bonusValue: bonusesValue }),\n );\n if (resp.isSuccess) {\n dispatch(getClientAll()); // TODO дополнительная ответвтвенность, вынести в основной код\n }\n\n return resp;\n } catch (error) {\n captureException(error);\n }\n }, [providerId, bonusesValue, dispatch]);\n};\n","import { useEffect } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { useRouter } from 'next/router';\n\nimport CardPayment from '~/src/features/payments-abn/components/CardPayment';\nimport { CardPaymentForm } from '~/src/features/payments-abn/components/CardPayment/CardPaymentForm';\nimport PaymentFrame from '~/src/features/payments-abn/components/PaymentFrame';\nimport { PaymentMethodCards } from '~/src/features/payments-abn/components/PaymentMethodCards';\nimport { SberPay } from '~/src/features/payments-abn/components/SberPay';\nimport SbpPaymentDetail from '~/src/features/payments-abn/components/useSbpPayment/SbpPaymentDetail';\nimport { INewCardPayment, initPaymentState, newCardPayment } from '~/src/features/payments-abn/store/actions';\nimport { IQueryPaymentParams } from '~/src/features/payments-abn/types';\nimport { TState } from '~/src/store';\n\ninterface IProps {\n paymentSum?: number,\n}\n\nexport const PaymentBlock = ({ paymentSum = 0 }: IProps): JSX.Element | null => {\n const dispatch = useDispatch();\n const { query: { pay: queryPay, agreement: queryAgreement, s: queryPaySum, deliveryRequestId = null } } = useRouter();\n\n const isOnlinePay = queryPay === 'online' && !!queryPaySum && !!queryAgreement;\n\n const {\n frameUrl,\n } = useSelector((state: TState) => ({\n frameUrl: state.payment.result.frameUrl,\n }), shallowEqual);\n\n\n useEffect(() => {\n dispatch(initPaymentState(paymentSum));\n }, []);\n\n useEffect(() => {\n if (isOnlinePay) {\n const newCardArgs: INewCardPayment = {\n _agreement: queryAgreement,\n };\n\n if (deliveryRequestId) {\n newCardArgs.deliveryRequestId = deliveryRequestId;\n }\n\n dispatch(newCardPayment(newCardArgs));\n }\n }, [isOnlinePay]);\n\n return (\n <>\n {frameUrl\n ? // TODO перенести PaymentFrame внутрь метода оплаты картой CardPayment, для оплаты новой картой\n : <>\n \n\n \n\n \n\n \n \n \n \n }\n \n );\n};\n","export interface ISelectData {\n value: string,\n label: string | number,\n}\n\nexport interface IFormData {\n paySum: number,\n payCard: number,\n payBonuses: number,\n email: string | ISelectData,\n useBonuses: boolean,\n connectAutoPay: boolean,\n}\n\nexport type TField = {\n value: string,\n isValid: boolean,\n clearInput: () => void,\n}\n\nexport const defaultFormData: IFormData = {\n paySum: 0,\n payCard: 0,\n email: '',\n payBonuses: 0,\n useBonuses: false,\n connectAutoPay: false,\n};\n\nexport interface IAgreementData {\n label: string,\n value: string,\n contact: string,\n rowEnc: string | null,\n phone: string,\n}\n\nexport const defaultAgreementData: IAgreementData = {\n label: '',\n value: '',\n contact: '',\n rowEnc: '',\n phone: '',\n};\n\nexport type TMenuItem = {\n value: string,\n text: string,\n action: () => void,\n}\n","import styled from 'styled-components';\n\nimport InputSimple, { nameDecorator, phoneDecorator } from '@r1-frontend/ui-react/components/inputSimple';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport Select from '@r1-frontend/ui-react/components/select/select';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nconst InputPhone = phoneDecorator(InputSimple);\nconst InputName = nameDecorator(InputSimple);\n\n\nexport const InfoSection = styled.div`\n width: 100%;\n background-color: ${COLORS.BgSurface};\n flex-direction: column;\n padding: 24px;\n border-radius: ${BorderRadius.OuterBlockRadius};\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n padding: 24px 8px;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n padding: 20px;\n border-radius: ${BorderRadius.componentRadius};\n }\n`;\n\nexport const InfoContainer = styled.div`\n flex-direction: column;\n position: relative;\n width: inherit;\n align-items: flex-start;\n margin-left: -4px;\n\n > div:first-child {\n background-color: ${COLORS.BgSubstrate};\n margin: 0 auto;\n }\n`;\n\nexport const SPhoneInput = styled(InputPhone)<{ isNotFound?: boolean}>`\n margin-bottom: 10px;\n position: relative;\n margin-top: 16px;\n margin-left: 4px;\n\n input {\n background-image: url(/static/images/payments-abn/input-icon.svg);\n background-repeat: no-repeat;\n background-position: 95%;\n }\n`;\n\nexport const StyledInput = styled(InputName)<{ isNotFound?: boolean}>`\n position: relative;\n margin-bottom: 10px;\n margin-top: 16px;\n margin-left: 4px;\n\n input {\n border-color: ${p => p.isNotFound ? COLORS.Logo : COLORS.BgSecondary} !important;\n background-image: url(/static/images/payments-abn/input-icon.svg);\n background-repeat: no-repeat;\n background-position: 95%;\n }\n`;\n\nexport const NotFoundText = styled.p`\n ${FONTS.XXS};\n color: ${COLORS.Error};\n margin-top: -10px;\n margin-left: 4px;\n`;\n\nexport const InfoLineTitle = styled.div`\n white-space: pre-wrap;\n ${FONTS.XS};\n margin-left: 8px;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n padding-left: 16px;\n padding-right: 16px;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n padding-left: 0;\n padding-right: 0;\n }\n`;\n\nexport const Text = styled.p`\n ${FONTS.S};\n color: ${COLORS.TextSecondary};\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n ${FONTS.XS};\n }\n`;\n\nexport const FormGreyText = styled.div`\n ${FONTS.S};\n color: ${COLORS.TextSecondary};\n display: block;\n`;\n\nexport const SSelect = styled(Select)`\n margin-top: 16px;\n \n > div > div:first-child > div {\n max-width: calc(100% - 30px);\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n width: 100%;\n display: inline;\n width: 100%;\n }\n\n div:nth-child(3) > div > div {\n padding: 16px;\n :hover {\n background-color: transparent;\n }\n }\n\n :nth-child(1) > div:first-child {\n border: 2px solid ${COLORS.GRAY_LIGHT};\n div > div {\n ${FONTS.XS};\n }\n } \n`;\n","import { Dispatch, SetStateAction, useCallback, useEffect, useMemo, useState } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport getContracts, { ResponseDto } from '@r1-frontend/api-domru/api-profile/v1/unauth/contract-asterisked';\n\nimport { dataLayerPush } from '@r1-frontend/analytics/dataLayerPush';\n\nimport Toggle from '@r1-frontend/ui-react/components/controls/Toggle';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport Throbber from '@r1-frontend/ui-react/components/loaders/Throbber';\nimport { CATEGORIES, EVENTS } from '@r1-frontend/shared/constants/analytics';\nimport { useMatchMedia } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { setAgreement } from '~/src/features/payments-abn/store/actionCreators';\nimport { defaultAgreementData, IAgreementData, TField, TMenuItem } from '~/src/features/payments-unauth-abn/types';\nimport { usePrepareQueryData } from '~/src/helpers/hooks/usePrepareQueryData';\n\nimport * as ST from './styled';\n\nexport interface ISelectAgreementProps {\n setIsCloseFrame: Dispatch>,\n isCloseFrame: boolean,\n}\n\nexport type TOptionValue = 'phone' | 'agreement';\n\nconst CONTACT_ROW_TYPE = 3;\n\nconst PaymentType = ({\n setIsCloseFrame,\n isCloseFrame,\n}: ISelectAgreementProps) => {\n const dispatch = useDispatch();\n const isDesktop = useMatchMedia(`(max-width: ${wideBreakpoints.sDesktop}) and (min-width: ${wideBreakpoints.tablet})`);\n const isMobile = useMatchMedia(`(max-width: ${wideBreakpoints.mobile})`);\n\n const { agreement: queryAgreement, c: queryContact, s: querySum } = usePrepareQueryData();\n const [agreementData, setAgreementData] = useState(defaultAgreementData);\n const [agreementList, setAgreementList] = useState([]);\n const [activeFilter, setActiveFilter] = useState('phone');\n const [contactValue, setContactValue] = useState();\n const [notFound, setNotFound] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n\n const isPhone = activeFilter === 'phone';\n\n const agreementText = useMemo(() => (isDesktop || isMobile ? 'По договору' : 'По номеру договора'), [isDesktop, isMobile]);\n const phoneText = useMemo(() => (isDesktop || isMobile ? 'По телефону' : 'По номеру телефона'), [isDesktop, isMobile]);\n\n const notFoundText = notFound\n ? \n {activeFilter === 'phone'\n ? 'Похоже, вы неверно ввели номер. Пожалуйста, попробуйте ещё раз.'\n : 'Такого договора не существует. Пожалуйста, попробуйте ещё раз.'\n }\n \n : null;\n\n const menuItems = [\n {\n text: phoneText,\n value: 'phone',\n action: () => {\n dataLayerPush({\n event: EVENTS.UAevent,\n category: CATEGORIES.newPayment,\n action: 'click payment by phone_number',\n });\n },\n },\n {\n text: agreementText,\n value: 'agreement',\n action: () => {\n dataLayerPush({\n event: EVENTS.UAevent,\n category: CATEGORIES.newPayment,\n action: 'click payment by agreement',\n });\n },\n },\n ];\n\n const toggleLabels = useMemo(() => (\n {\n leftText: phoneText,\n rightText: agreementText,\n }\n ), [isDesktop, isMobile]);\n\n const [activeMenuItem, setActiveMenuItem] = useState(menuItems.filter(item => item.value === activeFilter)[0]);\n\n useEffect(() => {\n const currentItem = menuItems.filter((item: TMenuItem) => item.value === activeFilter)[0];\n setActiveMenuItem(currentItem);\n }, [activeFilter, isDesktop, isMobile]);\n\n useEffect(() => {\n if (isCloseFrame) {\n setContactValue(undefined);\n setAgreementList([]);\n setActiveFilter('phone');\n setAgreementData(defaultAgreementData);\n }\n }, []);\n\n useEffect(() => {\n if (queryContact || querySum) {\n setActiveFilter('agreement');\n }\n }, []);\n\n useEffect(() => {\n if (queryContact || querySum) {\n if (activeFilter === 'agreement') {\n setNotFound(false);\n setContactValue({ ...contactValue, value: (queryContact || queryAgreement) } as TField);\n getAgreementList(queryContact || queryAgreement);\n } else {\n setContactValue(undefined);\n setAgreementList([]);\n }\n }\n }, [queryContact, queryAgreement, setContactValue, activeFilter, setAgreementList]);\n\n const onChangeHandler = (value: TField) => {\n setIsCloseFrame(false);\n setContactValue(value);\n dispatch(setAgreement(''));\n };\n\n const getAgreementList = useCallback(async(value?: string) => {\n setIsCloseFrame(false);\n\n if (value) {\n setIsLoading(true);\n\n const resp = await doRequest.apiProfile(\n getContracts(value, false),\n );\n\n if (resp.isSuccess) {\n const contactList = resp.payload.contacts\n .map((contact) => {\n return {\n label: contact.contactType === CONTACT_ROW_TYPE ? contact.row : contact.address,\n value: contact.contactType === CONTACT_ROW_TYPE ? contact.row : contact.address,\n contact: isPhone ? contact.row : value,\n rowEnc: contact.rowEnc,\n phone: isPhone ? value : '',\n };\n })\n .filter((contact) => contact.label);\n\n const [firstContact] = contactList;\n\n setAgreementList(contactList ?? []);\n setAgreementData(firstContact ?? defaultAgreementData);\n setNotFound(!contactList?.length);\n dispatch(setAgreement(firstContact.contact, firstContact.rowEnc ?? undefined));\n } else {\n setAgreementList([]);\n dispatch(setAgreement(''));\n setNotFound(true);\n }\n setIsLoading(false);\n }\n }, [isPhone, activeFilter, setNotFound, queryContact, querySum]);\n\n const onMenuItemClick = useCallback((value) => {\n const valueItem = menuItems.filter(item => item.text === value)[0];\n if (valueItem) {\n setActiveMenuItem(valueItem);\n setAgreementList([]);\n setAgreementData(defaultAgreementData);\n setNotFound(false);\n setContactValue(undefined);\n valueItem.action();\n setActiveFilter(valueItem.value as TOptionValue);\n }\n }, [activeMenuItem, activeFilter]);\n\n return (\n \n \n \n {activeFilter === 'agreement'\n ? onChangeHandler(value)}\n onBlur={() => getAgreementList(contactValue?.value)}\n isNotFound={notFound}\n maxLength={'12'}\n data-test='field-agreement'\n className={'ym-disable-keys'}\n />\n : onChangeHandler(value)}\n onBlur={() => getAgreementList(contactValue?.value)}\n isNotValid={notFound}\n data-test='field-phone'\n className={'ym-disable-keys'}\n />}\n \n {agreementList.length > 0\n ? {agreementList.length === 1\n ? agreementData?.label\n : <>\n К этому номеру привязано несколько адресов. Выберите, для какого адреса вы хотите пополнить лицевой счёт.\n void}\n />\n \n }\n \n : notFoundText\n }\n \n \n );\n};\n\nexport default PaymentType;\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const PageTitle = styled.h1`\n ${FONTS.H1};\n color: ${COLORS.TextPrimary};\n margin-top: 0;\n margin-bottom: 32px;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n margin-bottom: 24px;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n ${FONTS.H3};\n }\n`;\n\nexport const PageContent = styled.div`\n display: grid;\n grid-template-columns: 480px 992px;\n column-gap: 32px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n grid-template-columns: 384px 800px;\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n grid-template-columns: 296px 616px;\n column-gap: 24px;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n grid-template-columns: 1fr;\n row-gap: 32px;\n }\n`;\n\nexport const InfoBlock = styled.div`\n flex-direction: column;\n width: 100%;\n row-gap: 24px;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n margin-top: 8px;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n margin-top: 0;\n }\n`;\n\nexport const ActionsBlock = styled.div`\n flex-direction: column;\n width: 100%;\n row-gap: 64px;\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n width: 100%;\n row-gap: 32px;\n }\n`;\n\nexport const ActionSectionWrapper = styled.div`\n flex-direction: column;\n width: 100%;\n row-gap: 24px;\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n align-items: initial;\n row-gap: 16px;\n }\n`;\n\nexport const ActionSectionTitle = styled.h3`\n ${FONTS.H3};\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n ${FONTS.H4};\n }\n`;\n\nexport const ActionSectionContent = styled.div`\n flex-direction: column;\n width: 100%;\n align-items: baseline;\n row-gap: 24px;\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n align-items: initial;\n row-gap: 32px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n row-gap: 12px;\n }\n`;\n\nexport const Container = styled.div`\n flex-direction: column;\n width: 100%;\n ${FONTS.S};\n`;\n\nexport const HeaderText = styled.p`\n ${FONTS.S};\n \n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.XS};\n }\n`;\n\nexport const Header = styled.h2<{margin: string}>`\n ${FONTS.H3};\n margin-bottom: ${props => props.margin};\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.H4};\n }\n`;\n\nexport const Link = styled.a`\n ${FONTS.S};\n color: ${COLORS.Link};\n cursor: pointer;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${FONTS.XS};\n }\n`;\n","import { useCallback, useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useRouter } from 'next/router';\n\nimport { BaseButton, btnSizes, btnTypes } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { EResultPopupStatus } from '@r1-frontend/ui-react/components/popups/popupResult';\nimport { RubleSymbol } from '@r1-frontend/ui-react/experimental/purchase/cost/Cost/RubleSymbol';\n\nimport { PaymentBlock } from '~/src/features/payments-abn/components/PaymentBlock';\nimport ResultPopup, { defaultPopupState } from '~/src/features/payments-abn/components/PopupResult';\nimport { setPaymentResult } from '~/src/features/payments-abn/store/actionCreators';\nimport { initialPaymentResult } from '~/src/features/payments-abn/store/reducers';\nimport PaymentBanner from '~/src/features/payments-unauth-abn/components/PaymentBanner';\nimport PaymentType from '~/src/features/payments-unauth-abn/components/PaymentType';\nimport { usePrepareQueryData } from '~/src/helpers/hooks/usePrepareQueryData';\nimport { TState } from '~/src/store';\nimport { openChat } from '~/src/store/actions/chat';\n\nimport { ErrorDisconnectText } from '~/src/features/payments-abn/components/CardsList/styled';\nimport * as ST from './styled';\n\nconst PaymentsUnAuthLayout = (): JSX.Element => {\n const dispatch = useDispatch();\n\n const router = useRouter();\n // TODO заменить на useRouter\n const { s: queryPaySum } = usePrepareQueryData();\n\n const {\n payment: { paymentData: { paymentSum, agreement }, result: { isOpenPopup, isPayCardSuccess, payStatus, queryAgreement: payAgreement } },\n } = useSelector((state: TState) => state);\n\n const [popupState, setPopupState] = useState(defaultPopupState);\n const [isCloseFrame, setIsCloseFrame] = useState(false);\n\n const onCloseHandler = useCallback(() => {\n dispatch(setPaymentResult(initialPaymentResult));\n setPopupState(defaultPopupState);\n\n if (popupState.type === 'success') {\n router.push('/');\n }\n }, [popupState.type, router]);\n\n useEffect(() => {\n const isSuccess = isPayCardSuccess && (payStatus === 1 || payStatus === 2);\n\n setPopupState({\n isOpen: isOpenPopup,\n type: isSuccess ? EResultPopupStatus.SUCCESS : EResultPopupStatus.ERROR,\n title: isSuccess ? `Вы оплатили услуги по договору ${payAgreement}` : 'Платёж не прошёл',\n text: isSuccess\n ? `Баланс пополнен на ${paymentSum} ${RubleSymbol}`\n : \n Попробуйте ещё раз или напишите в 

    dispatch(openChat())}>поддержку

    \n
    ,\n actions: ,\n });\n }, [agreement, isOpenPopup, isPayCardSuccess, payStatus, onCloseHandler, payAgreement, paymentSum]);\n\n return (\n <>\n Оплата услуг\n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default PaymentsUnAuthLayout;\n","import { createSvg } from '../createSvg';\n\nconst ImportSquare = ({ strokeWidth = 1.5 }): JSX.Element => {\n return (\n \n \n \n \n \n );\n};\n\nexport default createSvg(\n ImportSquare,\n 'import-square',\n);\n","import { BaseAnalytics } from '@r1-frontend/analytics/dataLayerPush';\n\nclass MobileAppPopupAnalytics extends BaseAnalytics {\n constructor(category = 'VAS') {\n super();\n\n this.category = category;\n }\n\n show() {\n this.send('view_install_app_after_payment');\n }\n\n downloadApp() {\n this.send('click_download_app');\n }\n}\n\nexport const mobileAppPopupAnalytics = new MobileAppPopupAnalytics();\n","import styled from 'styled-components';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport DefaultPopup, { IDefaultPopupCustomStyles } from '@r1-frontend/ui-react/components/popups/defaultPopup';\nimport { ImportSquare } from '@r1-frontend/ui-react/components/svg/arrows';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\nimport WebpImage from '@r1-frontend/ui-react/components/WebpImage';\nimport { FullWidthListContainer, IndentContainer, NonStaticContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport DesktopBanner from '~/static/images/payments-abn/mobile-app-popup/desktop-banner.png';\nimport DesktopBannerWebp from '~/static/images/payments-abn/mobile-app-popup/desktop-banner.webp';\nimport MobileBanner from '~/static/images/payments-abn/mobile-app-popup/mobile-banner.png';\nimport MobileBannerWebp from '~/static/images/payments-abn/mobile-app-popup/mobile-banner.webp';\n\nimport { mobileAppPopupAnalytics } from './analytics';\n\nconst customStyles: IDefaultPopupCustomStyles = {\n popup: {\n default: {\n overflowY: 'hidden',\n },\n },\n};\n\ninterface IProps {\n isOpen: boolean,\n onClose: () => void,\n\n className?: string,\n}\n\n/**\n * Попап с предложением скачать мобильное приложение\n *\n * В десктопной версии отображается QR-код для скачивания МП.\n *\n * В мобильной версии отображается кнопка, при нажатии на которую пользователя редиректит на страницу скачивания МП.\n */\nconst MobileAppPopup = ({ isOpen, onClose, className }: IProps): JSX.Element => {\n const isTablet = useMatchMediaByWidth(wideBreakpoints.tablet);\n\n const downloadHandler = () => {\n mobileAppPopupAnalytics.downloadApp();\n };\n\n return (\n \n \n \n \n

    \n «Мой Дом.ру» всегда под рукой\n

    \n \n Все ваши услуги и чат с техподдержкой в одном приложении.\n \n
    \n\n {isTablet && (\n \n \n }\n onClick={downloadHandler}\n data-test='download-btn'\n >\n Скачать приложение\n \n \n \n )}\n
    \n
    \n\n \n \n \n \n \n
    \n );\n};\n\nexport default styled(MobileAppPopup)`\n ${TextWrapper} {\n max-width: 290px;\n }\n\n ${NonStaticContainer} {\n bottom: 0;\n right: 70px;\n width: 196px;\n height: 148px;\n\n img,\n picture {\n width: 100%;\n height: 100%;\n object-position: center;\n object-fit: contain;\n }\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n ${NonStaticContainer} {\n bottom: 37px;\n right: 0;\n width: 100px;\n height: 126px;\n }\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${TextWrapper} {\n max-width: 245px;\n }\n }\n\n @media (max-width: ${wideBreakpoints.sMobile}) {\n ${TextWrapper} {\n max-width: 200px;\n }\n }\n`;\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\n\nimport { ActionSectionContent } from '~/src/features/payments-abn/styled';\n\nexport const TypeContent = styled(ActionSectionContent)<{ isLoading?: boolean }>`\n flex-direction: row;\n flex-wrap: nowrap;\n column-gap: 8px;\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n column-gap: ${p => p.isLoading ? '8px' : 0};\n }\n`;\n\nexport const TypeWrapper = styled.div`\n width: 340px;\n height: 236px;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n width: 306px;\n height: 236px;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n width: 370px;\n height: 128px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n width: 190px;\n height: 172px;\n }\n`;\n","import { useEffect, useMemo } from 'react';\nimport { SkeletonTheme } from 'react-loading-skeleton';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { useRouter } from 'next/router';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { WithSkeleton, WithSkeletonContext } from '@r1-frontend/ui-react/components/loaders/Skeleton';\nimport SlideCarousel from '@r1-frontend/ui-react/components/SlideCarousel';\nimport { TicketDiscount, WalletAdd } from '@r1-frontend/ui-react/components/svg/money';\nimport ToggleCard from '@r1-frontend/ui-react/organisms/ToggleCard';\nimport { TInfoBlockData } from '@r1-frontend/ui-react/organisms/ToggleCard/types';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { isSomeEnum } from '@r1-frontend/shared/guards/isSomeEnum';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { EPaymentTypeIds } from '~/src/features/payments-abn/store/actionCreators';\nimport { updatePaymentTypeId } from '~/src/features/payments-abn/store/actions';\nimport { TState } from '~/src/store';\n\nimport { ActionSectionWrapper } from '~/src/features/payments-abn/styled';\nimport * as ST from './styled';\n\nconst types: TInfoBlockData[] = [\n {\n id: EPaymentTypeIds.DEFAULT,\n title: 'Просто оплатить',\n info: 'Единоразово пополнить баланс на любую сумму',\n icon: ,\n },\n {\n id: EPaymentTypeIds.WHOLESALE,\n title: 'Оформить абонемент',\n info: 'И экономить каждый месяц до 15%',\n icon: ,\n },\n];\n\nconst PaymentType = (): JSX.Element | null => {\n const { query } = useRouter();\n const dispatch = useDispatch();\n const { paymentTypeId, wholesaleCheaperData, frameUrl } = useSelector((state: TState) => ({\n paymentTypeId: state.payment.paymentTypeId,\n wholesaleCheaperData: state.wholesaleCheaperData,\n frameUrl: state.payment.result.frameUrl,\n }), shallowEqual);\n const { isLoading } = wholesaleCheaperData;\n\n const isMobile = useMatchMediaByWidth(wideBreakpoints.mobile);\n\n const onClickHandler = (id: TInfoBlockData['id']) => {\n if (id !== paymentTypeId) {\n dispatch(updatePaymentTypeId(id as EPaymentTypeIds));\n }\n };\n\n useEffect(() => {\n const { paymentType } = query;\n const isPaymentTypeId = isSomeEnum(EPaymentTypeIds);\n\n if (isPaymentTypeId(paymentType) && paymentType !== paymentTypeId) {\n dispatch(updatePaymentTypeId(paymentType));\n }\n }, []);\n\n const renderTypes = () => (\n types.map(type => (\n \n \n \n \n \n \n \n ))\n );\n\n const slideIndex = useMemo(() => types.findIndex(type => type.id === paymentTypeId), [paymentTypeId]);\n\n if (frameUrl) {\n return null;\n }\n\n return (\n \n \n {isMobile\n ? \n {renderTypes()}\n \n : \n {renderTypes()}\n \n }\n \n \n );\n};\n\nexport default PaymentType;\n","import { ReactNode } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\n\nimport { EValidityStatus } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport { connectSeasonTicket } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actions';\nimport { selectPaymentSum } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/selectors/selectPaymentSum';\nimport { TState } from '~/src/store';\n\ninterface IProps {\n children: ReactNode,\n}\n\nconst ConnectButton = ({ children }: IProps): JSX.Element => {\n const dispatch = useDispatch();\n\n const { wholesaleCheaperData, isPaymentInProcess, bonusesInfo, paySumIsError, paySumIsLoading } = useSelector((state: TState) => ({\n wholesaleCheaperData: state.wholesaleCheaperData.wholesaleCheaperData,\n isPaymentInProcess: state.seasonTicketPayment.isInProcess,\n bonusesInfo: state.seasonTicketPayment.bonusesInfo,\n currentPaySum: selectPaymentSum(state),\n paySumIsError: state.seasonTicketPayment.paySumIsError,\n paySumIsLoading: state.seasonTicketPayment.paySumIsLoading,\n }), shallowEqual);\n\n const { availableFlags = [] } = wholesaleCheaperData || {};\n const { isUseBonuses, validity } = bonusesInfo;\n\n const onConnect = () => {\n dispatch(connectSeasonTicket());\n };\n\n const hasPaySumm = !paySumIsError && !paySumIsLoading;\n const isDisabled = !availableFlags.length || (isUseBonuses ? validity !== EValidityStatus.IS_VALID : false) || !hasPaySumm;\n\n return (\n \n \n {children}\n \n \n );\n};\n\nexport default ConnectButton;\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const HowItWorksContent = styled.div`\n flex-direction: column;\n row-gap: 16px;\n`;\n\nexport const TicketsInfo = styled.div`\n flex-direction: column;\n row-gap: 12px;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n row-gap: 8px;\n }\n`;\n\nexport const BoldText = styled.span`\n ${FONTS.MediumXS};\n white-space: nowrap;\n\n @media (min-width: ${wideBreakpoints.mobile}) {\n ${FONTS.MediumS};\n }\n`;\n\nexport const UpShiftedContent = styled.div`\n flex-direction: column;\n row-gap: 16px;\n margin-top: -12px;\n`;\n\nexport const Text = styled.p`\n color: ${COLORS.TextInfo};\n ${FONTS.S};\n white-space: break-spaces;\n`;\n\nexport const ChatLink = styled.span`\n ${FONTS.MediumS};\n color: ${COLORS.Link};\n cursor: pointer;\n`;\n","import { useDispatch, useSelector } from 'react-redux';\nimport Router from 'next/router';\n\nimport PopupResult from '@r1-frontend/ui-react/components/popups/popupResult';\n\nimport { setTicketPopup } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport { updateClientInfo } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actions';\nimport { initialTicketPopupState, TConnectStep } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/reducer';\nimport { TState } from '~/src/store';\n\nimport ConnectionError from './ConnectionError';\nimport ConnectionPaid from './ConnectionPaid';\nimport ConnectionSuccess from './ConnectionSuccess';\nimport PaymentDeclined from './PaymentDeclined';\nimport QrFetchingError from './QrFetchingError';\n\nconst PopupContent: Record JSX.Element> = {\n success: ConnectionSuccess,\n paid: ConnectionPaid,\n error: ConnectionError,\n declined: PaymentDeclined,\n qrError: QrFetchingError,\n none: () => <>,\n};\n\nconst STEPS_WITH_REDIRECT: TConnectStep[] = ['success', 'paid'];\n\nconst TicketConnectionPopup = (): JSX.Element => {\n const dispatch = useDispatch();\n const { ticketPopup: { isOpen, step, title, text, type } } = useSelector((state: TState) => state.seasonTicketPayment);\n\n const Component = PopupContent[step] || PopupContent['none'];\n\n const onClose = () => {\n if (STEPS_WITH_REDIRECT.includes(step)) {\n // диспатч при клике на кнопку закрытия попапа (\"крестик\")\n dispatch(updateClientInfo());\n Router.push('/lk');\n } else {\n dispatch(setTicketPopup(initialTicketPopupState));\n }\n };\n return (\n \n \n \n );\n};\n\nexport default TicketConnectionPopup;\n","import { useDispatch } from 'react-redux';\nimport Router from 'next/router';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\n\nimport { updateClientInfo } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actions';\n\nconst ConnectionSuccess = (): JSX.Element => {\n const dispatch = useDispatch();\n\n const onClose = () => {\n dispatch(updateClientInfo());\n Router.push('/lk');\n };\n\n return (\n \n \n \n );\n};\n\nexport default ConnectionSuccess;\n","import { useDispatch } from 'react-redux';\nimport Router from 'next/router';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\n\nimport { updateClientInfo } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actions';\n\nconst ConnectionPaid = (): JSX.Element => {\n const dispatch = useDispatch();\n\n const onClose = () => {\n dispatch(updateClientInfo());\n Router.push('/lk');\n };\n\n return (\n \n \n \n );\n};\n\nexport default ConnectionPaid;\n","import { useDispatch } from 'react-redux';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\n\nimport OpenChat from '~/src/components/OpenChatLink';\nimport { pushDataLayer } from '~/src/features/payments-abn/components/SeasonTicketPayment/helpers';\nimport { setTicketPopup } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport { connectSeasonTicket } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actions';\nimport { initialTicketPopupState } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/reducer';\n\nimport * as ST from './styled';\n\nconst ConnectionError = (): JSX.Element => {\n const dispatch = useDispatch();\n\n const onTryAgain = () => {\n pushDataLayer('subscription_connect_try_again');\n dispatch(connectSeasonTicket());\n dispatch(setTicketPopup(initialTicketPopupState));\n };\n\n return (\n \n \n Нам не удалось подключить абонемент.\n Попробуйте снова или обратитесь в поддержку.\n \n \n \n Попробовать снова\n \n \n \n );\n};\n\nexport default ConnectionError;\n","import { useDispatch } from 'react-redux';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\n\nimport OpenChat from '~/src/components/OpenChatLink';\nimport { pushDataLayer } from '~/src/features/payments-abn/components/SeasonTicketPayment/helpers';\nimport { setTicketPopup } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport { paySeasonTicket } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actions';\nimport { initialTicketPopupState } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/reducer';\n\nimport * as ST from './styled';\n\nconst PaymentDeclined = (): JSX.Element => {\n const dispatch = useDispatch();\n\n const onTryAgain = () => {\n pushDataLayer('subscription_connect_try_again');\n dispatch(paySeasonTicket());\n dispatch(setTicketPopup(initialTicketPopupState));\n };\n\n return (\n \n \n Попробуйте пополнить баланс ещё раз или обратитесь в поддержку.\n Абонемент заработает, когда на балансе будет достаточно денег.\n \n \n \n Попробовать снова\n \n \n \n );\n};\n\nexport default PaymentDeclined;\n","import { useDispatch } from 'react-redux';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\n\nimport { pushDataLayer } from '~/src/features/payments-abn/components/SeasonTicketPayment/helpers';\nimport { setTicketPopup } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport { paySeasonTicket } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actions';\nimport { initialTicketPopupState } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/reducer';\n\nconst QrFetchingError = (): JSX.Element => {\n const dispatch = useDispatch();\n\n const onTryAgain = () => {\n pushDataLayer('subscription_connect_try_again');\n dispatch(paySeasonTicket());\n dispatch(setTicketPopup(initialTicketPopupState));\n };\n\n return (\n \n \n Попробовать снова\n \n \n );\n};\n\nexport default QrFetchingError;\n","import { IAvailableSeasonTicket } from '@r1-frontend/api-domru/api-season-ticket/v1/season-ticket/dto/ResponseDto';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport PopupResult, { EResultPopupStatus } from '@r1-frontend/ui-react/components/popups/popupResult';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { pluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { monthPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\n\nimport * as ST from './styled';\n\ninterface IProps {\n isOpen: boolean,\n onClose: () => void,\n tickets?: IAvailableSeasonTicket[],\n}\n\nconst HowItWorks = ({\n isOpen,\n onClose,\n tickets,\n}: IProps): JSX.Element => (\n Как это работает?}\n onClose={onClose}\n >\n \n \n \n При покупке абонемента надо пополнить баланс сразу на несколько месяцев вперёд, но плату за услуги мы будем списывать так же раз в месяц.\n \n {tickets?.map((ticket) => {\n const { id, countMonth, delta } = ticket;\n return (\n \n Абонемент на {countMonth} {pluralize(countMonth, monthPluralize)} — каждый месяц\n будем списывать на {delta} ₽ меньше.\n \n );\n })}\n \n \n \n \n \n \n);\n\nexport default HowItWorks;\n","import { useSelector } from 'react-redux';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { pluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { bonusPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { IHintProps } from '~/src/features/payments-abn/components/InfoHint';\nimport { TState } from '~/src/store';\n\nexport const useSbpHint = () => {\n const { bonusesInfo: { isUseBonuses, amount, result: bonusesPaymentResult }, result: connectionResult } = useSelector((state: TState) => state.seasonTicketPayment);\n\n const isTablet = useMatchMediaByWidth(wideBreakpoints.tablet);\n\n const getSbpHintByBonusesPaymentResult = (): IHintProps => {\n switch (bonusesPaymentResult) {\n case 'success':\n return {\n hintType: 'info',\n hintMessage: `Списали ${amount} ${pluralize(amount, bonusPluralize)} с вашего счета и подключили абонемент.\\n` +\n 'Осталось пополнить баланс по инструкции ниже. Абонемент заработает, когда на балансе будет достаточно денег.',\n };\n case 'error':\n return {\n hintType: 'error',\n hintMessage: 'Не удалось списать бонусы. Попробуйте снова.',\n };\n case 'none':\n default: {\n const firstAction = isTablet ? '«Оплатить»' : '«Показать QR-код»';\n const nextAction = isTablet ? 'вы подтвердите платёж в мобильном приложении вашего банка' : 'отсканируете его';\n\n return {\n hintType: 'info',\n hintMessage: `Когда вы нажмёте ${firstAction}, сначала мы спишем бонусы, а когда ${nextAction}, спишем и деньги.`,\n };\n }\n }\n };\n\n const getSbpHint = (): IHintProps | null => {\n return (!isUseBonuses && connectionResult === 'success')\n ? {\n hintType: 'success',\n hintMessage: 'Абонемент подключён.\\n' +\n 'Осталось пополнить баланс по инструкции ниже. Абонемент заработает, когда на балансе будет достаточно денег.',\n }\n : null;\n };\n\n return { getSbpHintByBonusesPaymentResult, getSbpHint };\n};\n","import { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport InfoHint from '~/src/features/payments-abn/components/InfoHint';\nimport { BonusesPaymentForm } from '~/src/features/payments-abn/components/PaymentForms/components/BonusesPayment/BonusesPaymentForm';\nimport { useLoyaltyHint } from '~/src/features/payments-abn/components/SeasonTicketPayment/hooks/useLoyaltyHint';\nimport { EValidityStatus, setIsUseBonuses } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport { updateBonusesAmount } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actions';\nimport WriteOffDetail, { IWriteOff } from '~/src/features/payments-abn/components/WriteOffDetail';\nimport { TState } from '~/src/store';\n\nconst LoyaltySection = ({ writeOffs }: { writeOffs: IWriteOff[]}): JSX.Element => {\n const dispatch = useDispatch();\n\n const { bonusesInfo, loyaltyBonuses } = useSelector((state: TState) => ({\n bonusesInfo: state.seasonTicketPayment.bonusesInfo,\n loyaltyBonuses: state.loyalty.info.bonuses,\n }), shallowEqual);\n const { isUseBonuses, amount, validity } = bonusesInfo;\n\n const loyaltyHintData = useLoyaltyHint();\n\n const onToggleHandler = () => {\n dispatch(setIsUseBonuses(!isUseBonuses));\n };\n\n const onChangeHandler = (event: React.ChangeEvent) => {\n const onlyNumbers = Number(event.target.value.replace(/\\D/, ''));\n\n dispatch(updateBonusesAmount(+onlyNumbers));\n };\n\n return (\n <>\n \n {isUseBonuses\n ? <>\n {validity === EValidityStatus.IS_VALID && }\n {loyaltyHintData && }\n \n : \n }\n \n );\n};\n\nexport default LoyaltySection;\n","import { useMemo } from 'react';\nimport { shallowEqual, useSelector } from 'react-redux';\n\nimport { getIsAbnLoyaltyProgramEnabled } from '~/src/features/domru-bonus/constants/abnVariants';\nimport { IHintProps } from '~/src/features/payments-abn/components/InfoHint';\nimport { EValidityStatus } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport { TState } from '~/src/store';\n\nimport { useSbpHint } from './useSbpHint';\n\n\nexport const useLoyaltyHint = (): IHintProps | undefined => {\n const { paymentMethod, ticketPayment, availableBonuses } = useSelector((state: TState) => ({\n paymentMethod: state.payment.method?.methodType,\n ticketPayment: state.seasonTicketPayment,\n availableBonuses: state.loyalty.info.bonuses,\n }), shallowEqual);\n\n const isAbnProgramTermsEnabled = useMemo(getIsAbnLoyaltyProgramEnabled, []);\n\n const { bonusesInfo: { amount, validity }, seasonTicket } = ticketPayment;\n const { paySum = 0 } = seasonTicket || {};\n\n const { getSbpHintByBonusesPaymentResult } = useSbpHint();\n\n const requiredBonusesToPay = isAbnProgramTermsEnabled\n ? paySum / 0.2\n : paySum;\n\n const maxBonusesAmount = Math.min(availableBonuses, Math.floor(requiredBonusesToPay));\n\n switch (true) {\n case (amount === paySum):\n return;\n case (\n validity === EValidityStatus.IS_VALID &&\n amount < Math.ceil(paySum) &&\n paymentMethod === 'sbp'\n ):\n return getSbpHintByBonusesPaymentResult();\n case validity === EValidityStatus.IS_LOWER_BOUND_ERROR:\n return {\n hintType: 'error',\n hintMessage: `Невозможно списать 0 бонусов. Введите любое другое количество от 1 до ${maxBonusesAmount}. ` +\n 'Если не хотите списывать бонусы, просто уберите галочку.',\n };\n case validity === EValidityStatus.IS_UPPER_BOUND_ERROR: {\n const notMoreThanBonuses = ((maxBonusesAmount === 1 || maxBonusesAmount % 10 === 1) && maxBonusesAmount !== 11)\n ? 'бонуса'\n : 'бонусов';\n\n return {\n hintType: 'error',\n hintMessage: `Можно списать не больше ${maxBonusesAmount} ${notMoreThanBonuses}.`,\n };\n }\n }\n};\n","import styled from 'styled-components';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const QrBlock = styled.div`\n flex-wrap: nowrap;\n align-items: flex-start;\n padding: 24px;\n gap: 24px;\n border-radius: ${BorderRadius.OuterBlockRadius};\n background-color: ${COLORS.BgSurface};\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n display: none;\n }\n`;\n\nexport const QrSide = styled.div`\n padding: 15px;\n border: 1px solid ${COLORS.BgSubstrate};\n border-radius: ${BorderRadius.componentRadius};\n background-color: ${COLORS.BgMain};\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n padding: 14px;\n }\n`;\n\nexport const QrInner = styled.div`\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 176px;\n height: 176px;\n padding: 12px;\n border: 2px solid ${COLORS.Outline_Light};\n border-radius: 12px;\n background-color: transparent;\n\n & svg {\n max-width: 148px;\n max-height: 148px;\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n width: 162px;\n height: 162px;\n padding: 5px;\n }\n`;\n\nexport const QrError = styled.p`\n ${FONTS.XXS};\n color: ${COLORS.TextHint};\n margin-bottom: 12px;\n text-align: center;\n`;\n\nexport const SupportLink = styled.span`\n ${FONTS.MediumXXS};\n color: ${COLORS.Link};\n`;\n\nexport const QrButton = styled(Button)`\n width: 100%;\n`;\n\nexport const InfoSide = styled.div`\n flex-direction: column;\n`;\n\nexport const InfoTitle = styled.h5`\n ${FONTS.H5};\n margin-bottom: 12px;\n`;\n","import OpenChat from '~/src/components/OpenChatLink';\nimport { IDesktopSbpProps } from '~/src/features/payments-abn/components/SeasonTicketPayment/components/SbpPayment/types';\nimport SbpInstruction from '~/src/features/payments-abn/components/useSbpPayment/SbpInstruction';\n\nimport * as ST from './styled';\n\nconst DesktopSbp = ({\n isDisabled,\n loading,\n isQrCodeError,\n qrCode,\n onClick,\n}: IDesktopSbpProps): JSX.Element => {\n return (\n \n {qrCode\n ? \n : \n {isQrCodeError && (\n \n Ошибка. Попробуйте снова или обратитесь в поддержку.\n \n )}\n \n Показать QR-код\n \n \n }\n \n Как оплатить через СБП\n \n \n \n );\n};\n\nexport default DesktopSbp;\n","import { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { RubleSymbol } from '@r1-frontend/ui-react/experimental/purchase/cost/Cost/RubleSymbol';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { pushDataLayer } from '~/src/features/payments-abn/components/SeasonTicketPayment/helpers';\nimport { EValidityStatus } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport { connectSeasonTicket } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actions';\nimport { selectPaymentSum } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/selectors/selectPaymentSum';\nimport { TState } from '~/src/store';\n\nimport DesktopSbp from './Desktop';\nimport { ICommonSbpProps } from './types';\n\nconst SbpPayment = (): JSX.Element => {\n const isTablet = useMatchMediaByWidth(wideBreakpoints.tablet);\n\n const dispatch = useDispatch();\n const { ticketPayment, isUseBonuses, validity, currentPaySum, paySumIsError, paySumIsLoading } = useSelector((state: TState) => ({\n ticketPayment: state.seasonTicketPayment,\n isUseBonuses: state.seasonTicketPayment.bonusesInfo.isUseBonuses,\n validity: state.seasonTicketPayment.bonusesInfo.validity,\n currentPaySum: selectPaymentSum(state),\n paySumIsError: state.seasonTicketPayment.paySumIsError,\n paySumIsLoading: state.seasonTicketPayment.paySumIsLoading,\n }), shallowEqual);\n\n const { sbpInfo: { isFetching, qrCode, qrLink, result } } = ticketPayment;\n\n const onShowQrCode = () => {\n if (result === 'error') {\n pushDataLayer('subscription_connect_try_again');\n }\n dispatch(connectSeasonTicket());\n };\n\n const hasPaySumm = !paySumIsError && !paySumIsLoading;\n\n const commonProps: ICommonSbpProps = {\n isDisabled: isUseBonuses\n ? (!hasPaySumm || validity !== EValidityStatus.IS_VALID)\n : !hasPaySumm,\n loading: isFetching,\n onClick: onShowQrCode,\n };\n\n return (isTablet\n ? \n {qrLink ? 'Подтвердить' : currentPaySum ? `Оплатить ${currentPaySum} ${RubleSymbol}` : 'Оплатить'}\n \n : \n );\n};\n\nexport default SbpPayment;\n","import React from 'react';\nimport Skeleton, { SkeletonTheme } from 'react-loading-skeleton';\n\nimport 'react-loading-skeleton/dist/skeleton.css';\n\nimport { ListContainer } from '@r1-frontend/ui-react/experimental/containers';\n\n\nexport const LoadingPaySumSkeleton = (): JSX.Element => {\n return (\n \n \n \n \n \n \n \n );\n};\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\n\nimport { ActionSectionContent } from '~/src/features/payments-abn/styled';\n\nexport const DetailWrapper = styled(ActionSectionContent)`\n flex-direction: column;\n width: 100%;\n row-gap: 32px;\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n row-gap: 32px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n row-gap: 32px;\n }\n`;\n","import { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport Alert from '@r1-frontend/ui-react/components/Alert';\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport { RubleSymbol } from '@r1-frontend/ui-react/experimental/purchase/cost/Cost/RubleSymbol';\n\nimport OpenChat from '~/src/components/OpenChatLink';\nimport { useCardPayment } from '~/src/features/payments-abn/components/CardPayment/useCardPayment';\nimport InfoHint from '~/src/features/payments-abn/components/InfoHint';\nimport LoyaltyButton from '~/src/features/payments-abn/components/LoyaltyButton';\nimport ConnectButton from '~/src/features/payments-abn/components/SeasonTicketPayment/components/ConnectButton';\nimport LoyaltySection from '~/src/features/payments-abn/components/SeasonTicketPayment/components/LoyaltySection';\nimport SbpPayment from '~/src/features/payments-abn/components/SeasonTicketPayment/components/SbpPayment';\nimport { LoadingPaySumSkeleton } from '~/src/features/payments-abn/components/SeasonTicketPayment/components/TicketDetails/LoadingPaySumSkeleton';\nimport { useSbpHint } from '~/src/features/payments-abn/components/SeasonTicketPayment/hooks/useSbpHint';\nimport { connectSeasonTicket, updateSeasonTicket } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actions';\nimport { selectPaymentSum } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/selectors/selectPaymentSum';\nimport { useSbpPayment } from '~/src/features/payments-abn/components/useSbpPayment';\nimport WriteOffDetail from '~/src/features/payments-abn/components/WriteOffDetail';\nimport { selectBonusText } from '~/src/features/payments-abn/store/selectors/selectBonusText';\nimport { TState } from '~/src/store';\n\nimport { ActionSectionTitle, ActionSectionWrapper } from '~/src/features/payments-abn/styled';\nimport * as ST from './styled';\n\nconst TicketDetails = (): JSX.Element => {\n const dispatch = useDispatch();\n const { loyalty, paymentMethod, seasonTicketPayment, writeOffs, currentPaySum } = useSelector((state: TState) => ({\n loyalty: state.loyalty,\n paymentMethod: state.payment.method?.methodType,\n seasonTicketPayment: state.seasonTicketPayment,\n writeOffs: selectBonusText(state),\n currentPaySum: selectPaymentSum(state),\n }), shallowEqual);\n\n useSbpPayment();\n useCardPayment();\n\n const { isInProcess, bonusesInfo: { isUseBonuses, amount }, seasonTicket, paySumIsLoading, paySumIsError } = seasonTicketPayment;\n\n const { availability: { isRegistered } } = loyalty;\n\n const { getSbpHint } = useSbpHint();\n const sbpHintData = getSbpHint();\n\n const onPay = () => {\n dispatch(connectSeasonTicket());\n };\n\n const onUpdateSeasonTicket = () => {\n if (seasonTicket) {\n dispatch(updateSeasonTicket(seasonTicket));\n }\n };\n\n return (\n \n Детали оплаты\n \n {isRegistered\n ? \n : \n }\n\n {paySumIsLoading &&\n \n }\n\n {paySumIsError &&\n \n \n Что-то пошло не так, не загружается детализация для оплаты. Попробуйте ещё раз. Если не получится, напишите в поддержку.\n \n \n Перезагрузить\n \n \n }\n\n {(isUseBonuses && amount === seasonTicket?.paySum)\n ? \n : paymentMethod === 'sbp'\n ? <>\n {sbpHintData && }\n \n \n : \n {`Оплатить ${currentPaySum} ${RubleSymbol}`}\n \n }\n \n \n );\n};\n\nexport default TicketDetails;\n","import { IAvailableSeasonTicket } from '@r1-frontend/api-domru/api-season-ticket/v1/season-ticket/dto/ResponseDto';\n\nimport { RubleSymbol } from '@r1-frontend/ui-react/experimental/purchase/cost/Cost/RubleSymbol';\nimport ToggleCard from '@r1-frontend/ui-react/organisms/ToggleCard';\nimport { TInfoBlockData } from '@r1-frontend/ui-react/organisms/ToggleCard/types';\nimport { pluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { monthPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\n\nimport { toCurrency } from '~/src/helpers/numbers';\n\ninterface IProps {\n isActive: boolean,\n ticket: IAvailableSeasonTicket,\n onSelect: (id: TInfoBlockData['id']) => void,\n}\n\nconst SeasonTicket = ({ isActive, ticket, onSelect }: IProps): JSX.Element => {\n const { id, countMonth, deltaPeriod, sumPrice } = ticket;\n\n const totalDiscount = `${toCurrency(deltaPeriod)} ${RubleSymbol}`;\n\n const cardData: TInfoBlockData = {\n id,\n title: `${countMonth} ${pluralize(countMonth, monthPluralize)}`,\n info: `Экономия – ${totalDiscount}`,\n price: toCurrency(sumPrice),\n };\n\n return (\n \n );\n};\n\nexport default SeasonTicket;\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\n\nexport const Content = styled.div`\n flex-direction: column;\n gap: 10px;\n width: 100%;\n \n @media (max-width: ${wideBreakpoints.tablet}) {\n gap: 16px;\n }\n`;\n\nexport const ListWrapper = styled.div`\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n grid-template-rows: 168px;\n gap: 8px;\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n grid-template-rows: 128px;\n gap: 0;\n }\n`;\n","import { useMemo } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { IAvailableSeasonTicket } from '@r1-frontend/api-domru/api-season-ticket/v1/season-ticket/dto/ResponseDto';\n\nimport SlideCarousel from '@r1-frontend/ui-react/components/SlideCarousel';\nimport { TInfoBlockData } from '@r1-frontend/ui-react/organisms/ToggleCard/types';\n\nimport InfoHint from '~/src/features/payments-abn/components/InfoHint';\nimport SeasonTicket from '~/src/features/payments-abn/components/SeasonTicketPayment/components/Ticket';\nimport { useSlider } from '~/src/features/payments-abn/components/SeasonTicketPayment/hooks/useSlider';\nimport { useTicketHint } from '~/src/features/payments-abn/components/SeasonTicketPayment/hooks/useTicketHint';\nimport { updateSeasonTicket } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actions';\nimport { TState } from '~/src/store';\n\nimport * as ST from './styled';\n\ninterface IProps {\n selectedTicket?: IAvailableSeasonTicket,\n tickets: IAvailableSeasonTicket[],\n}\n\nconst TicketsList = ({\n selectedTicket,\n tickets,\n}: IProps): JSX.Element => {\n const dispatch = useDispatch();\n\n const { seasonTicket } = useSelector((state: TState) => state.seasonTicketPayment);\n const { id: selectedTicketId } = seasonTicket || {};\n\n const { isSlider, slideWidth = 190, slideHeight, cellSpacing = 0 } = useSlider();\n\n const hintData = useTicketHint();\n\n const onSelectTicket = (id: TInfoBlockData['id']) => {\n const ticketById = tickets.find(flag => flag.id === id);\n\n if (ticketById && id !== selectedTicketId) {\n dispatch(updateSeasonTicket(ticketById));\n }\n };\n\n const renderTickets = () => tickets.map(ticket => (\n \n ));\n\n const slideIndex = useMemo(() => tickets.findIndex(ticket => ticket.id === selectedTicket?.id), [selectedTicket, tickets]);\n\n return (\n \n {isSlider\n ? \n {renderTickets()}\n \n : {renderTickets()}\n }\n \n \n );\n};\n\nexport default TicketsList;\n","import { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\n\ntype TSliderProps = {\n isSlider: true,\n slideWidth: number,\n slideHeight: number,\n cellSpacing?: number,\n} | {\n isSlider: false,\n slideWidth?: never,\n slideHeight?: never,\n cellSpacing?: never,\n}\n\nexport const useSlider = (): TSliderProps => {\n const isLaptop = useMatchMediaByWidth(wideBreakpoints.laptop);\n const isTablet = useMatchMediaByWidth(wideBreakpoints.tablet);\n const isMobile = useMatchMediaByWidth(wideBreakpoints.mobile);\n\n switch (true) {\n case isLaptop && !isTablet:\n return {\n isSlider: true,\n slideWidth: 264,\n slideHeight: 168,\n cellSpacing: 8,\n };\n case isMobile:\n return {\n isSlider: true,\n slideWidth: 190,\n slideHeight: 126,\n };\n case isTablet:\n default:\n return {\n isSlider: false,\n };\n }\n};\n","import { shallowEqual, useSelector } from 'react-redux';\nimport dayjs from 'dayjs';\n\nimport { RubleSymbol } from '@r1-frontend/ui-react/experimental/purchase/cost/Cost/RubleSymbol';\nimport { NBSP } from '@r1-frontend/ui-react/tokens/symbols';\nimport { pluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { monthPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\n\nimport { IHintProps } from '~/src/features/payments-abn/components/InfoHint';\nimport { selectPaymentSum } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/selectors/selectPaymentSum';\nimport { ddmmmmyyyy, parseRusDate } from '~/src/helpers/date';\nimport { toCurrency } from '~/src/helpers/numbers';\nimport { TState } from '~/src/store';\n\nexport const useTicketHint = (): IHintProps => {\n const { wholesaleCheaperData, selectedTicket, currentPaySum } = useSelector((state: TState) => ({\n wholesaleCheaperData: state.wholesaleCheaperData.wholesaleCheaperData,\n selectedTicket: state.seasonTicketPayment.seasonTicket,\n currentPaySum: selectPaymentSum(state),\n }), shallowEqual);\n\n const { currentFlag = [] } = wholesaleCheaperData || {};\n const { activateDate = '', countMonth = 3 } = selectedTicket || {};\n\n const sumText = `${toCurrency(currentPaySum)}${NBSP}${RubleSymbol}`;\n\n if (currentFlag.length) {\n const { closeDate } = currentFlag[currentFlag.length - 1];\n\n const endDate = ddmmmmyyyy(parseRusDate(closeDate));\n const needPayNewTicket = `Чтобы оформить абонемент, пополните баланс на${NBSP}${sumText}.`;\n\n return {\n hintType: 'info',\n hintMessage: `У вас уже есть активный абонемент. Новый начнёт действовать, только когда закончится активный — с${NBSP}${endDate}. ${currentPaySum ? needPayNewTicket : ''}`,\n };\n }\n\n const writeOffPeriodText = `следующие ${countMonth}${NBSP}${pluralize(countMonth, monthPluralize)} мы будем списывать плату за${NBSP}услуги`;\n const needPayText = `Сейчас вы пополните баланс на${NBSP}${sumText}, и${NBSP}${writeOffPeriodText}`;\n const noNeedPayText = `У вас достаточно денег на${NBSP}балансе, поэтому ${writeOffPeriodText} с${NBSP}вашего баланса`;\n const startDate = dayjs(activateDate, 'DD.MM.YYYY').format(`D${NBSP}MMMM`);\n\n return {\n hintType: 'info',\n hintMessage: `${currentPaySum === 0 ? noNeedPayText : needPayText}. Абонемент будет действовать с${NBSP}${startDate}.`,\n };\n};\n","import styled from 'styled-components';\n\nexport const TitleWrapper = styled.div`\n flex-wrap: nowrap;\n align-items: center;\n column-gap: 8px;\n`;\n\nexport const IconWrapper = styled.div`\n cursor: pointer;\n`;\n","import { useEffect, useState } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { InfoCircleFlip } from '@r1-frontend/ui-react/components/svg/main';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { PaymentMethodCards } from '~/src/features/payments-abn/components/PaymentMethodCards';\nimport { pushDataLayer } from '~/src/features/payments-abn/components/SeasonTicketPayment/helpers';\nimport { updateSeasonTicket } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actions';\nimport { TState } from '~/src/store';\n\nimport PaymentFrame from '../PaymentFrame';\n\nimport ConnectButton from './components/ConnectButton';\nimport TicketConnectionPopup from './components/popups';\nimport HowItWorks from './components/popups/HowItWorks';\nimport TicketDetails from './components/TicketDetails';\nimport TicketsList from './components/TicketsList';\n\nimport { ActionsBlock, ActionSectionTitle, ActionSectionWrapper } from '~/src/features/payments-abn/styled';\nimport * as ST from './styled';\n\nconst SeasonTicketPayment = (): JSX.Element => {\n const dispatch = useDispatch();\n const isTablet = useMatchMediaByWidth(wideBreakpoints.tablet);\n\n const { wholesaleCheaperData, selectedTicket, paySumIsLoading, paySumIsError, frameUrl } = useSelector((state: TState) => ({\n wholesaleCheaperData: state.wholesaleCheaperData.wholesaleCheaperData,\n selectedTicket: state.seasonTicketPayment.seasonTicket,\n paySumIsError: state.seasonTicketPayment.paySumIsError,\n paySumIsLoading: state.seasonTicketPayment.paySumIsLoading,\n frameUrl: state.payment.result.frameUrl,\n }), shallowEqual);\n\n const { availableFlags = [], currentFlag = [] } = wholesaleCheaperData || {};\n const { paySum } = selectedTicket || {};\n\n const [isOpenPopup, setIsOpenPopup] = useState(false);\n\n const onOpenPopup = () => {\n setIsOpenPopup(true);\n pushDataLayer('subscription_details');\n };\n\n useEffect(() => {\n if (availableFlags.length) {\n const [initialTicket] = availableFlags;\n dispatch(updateSeasonTicket(initialTicket));\n }\n }, []);\n\n if (frameUrl) {\n return ;\n }\n\n return (\n \n \n Абонементы\n \n \n \n setIsOpenPopup(false)}\n tickets={availableFlags}\n />\n \n \n \n {!paySumIsLoading && (paySum || paySumIsError)\n ? <>\n \n \n \n : \n {`${currentFlag.length ? 'Продлить' : 'Подключить'} абонемент`}\n \n }\n \n \n \n );\n};\n\nexport default SeasonTicketPayment;\n","import { useMemo } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport Link from 'next/link';\nimport styled from 'styled-components';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport { progressiveBackground } from '@r1-frontend/ui-react/components/helpers/image';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport DefaultPopup from '@r1-frontend/ui-react/components/popups/defaultPopup';\nimport ControlElement from '@r1-frontend/ui-react/components/typography/controlElement';\nimport { H3 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph4 } from '@r1-frontend/ui-react/components/typography/paragraph';\nimport TextWrapper from '@r1-frontend/ui-react/components/typography/TextWrapper';\nimport WebpImage from '@r1-frontend/ui-react/components/WebpImage';\nimport { FullWidthListContainer, IndentContainer, ListContainer, NonStaticContainer } from '@r1-frontend/ui-react/experimental/containers';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\nimport { useMatchMediaByWidth } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport { toggleIsShowSpecOffer } from '~/src/features/payments-abn/store/actionCreators';\nimport { specialOfferAnalytics } from '~/src/features/specialOffersContainer/analytics';\nimport { viewOffer } from '~/src/features/specialOffersContainer/store/actions/thunk';\nimport { selectNewOrViewedOffers } from '~/src/features/specialOffersContainer/store/selectors';\nimport { TState } from '~/src/store';\nimport SpecOfferImage from '~/static/images/payments-abn/stopper/spec-offer.png';\nimport SpecOfferImageWebp from '~/static/images/payments-abn/stopper/spec-offer.webp';\nimport SpecOfferWithLabelImage from '~/static/images/payments-abn/stopper/spec-offer-with-label.png';\nimport SpecOfferWithLabelImageWebp from '~/static/images/payments-abn/stopper/spec-offer-with-label.webp';\nimport SpecOfferWithLabelMobileImage from '~/static/images/payments-abn/stopper/spec-offer-with-label-mobile.png';\nimport SpecOfferWithLabelMobileImageWebp from '~/static/images/payments-abn/stopper/spec-offer-with-label-mobile.webp';\nimport StopperDesktopBackground from '~/static/images/payments-abn/stopper/stopper-desktop-bg.png';\nimport StopperDesktopBackgroundWebp from '~/static/images/payments-abn/stopper/stopper-desktop-bg.webp';\nimport StopperMobileBackground from '~/static/images/payments-abn/stopper/stopper-mobile-bg.png';\nimport StopperMobileBackgroundWebp from '~/static/images/payments-abn/stopper/stopper-mobile-bg.webp';\n\nimport { useLabelAbnTest } from './useLabelAbnTest';\n\ninterface IProps {\n buttonText: string,\n onConnect: () => void,\n onClose?: () => void,\n className?: string,\n}\n\nconst SpecialOfferPopup = ({ buttonText, onConnect, onClose, className }: IProps): JSX.Element | null => {\n const isDesktop = useMatchMediaByWidth(wideBreakpoints.mobile, true);\n\n const dispatch = useDispatch();\n\n const { stopperData: { stopper, hasOtherOffers }, isShowSpecOffer } = useSelector((state: TState) => ({\n stopperData: selectNewOrViewedOffers(state),\n isShowSpecOffer: state.payment.isShowSpecOffer,\n }), shallowEqual);\n\n const isImageWithLabel = useLabelAbnTest();\n\n const { image, webpImage } = useMemo(() => {\n if (isImageWithLabel) {\n return isDesktop\n ? {\n image: SpecOfferWithLabelImage,\n webpImage: SpecOfferWithLabelImageWebp,\n }\n : {\n image: SpecOfferWithLabelMobileImage,\n webpImage: SpecOfferWithLabelMobileImageWebp,\n };\n }\n\n return {\n image: SpecOfferImage,\n webpImage: SpecOfferImageWebp,\n };\n }, [isDesktop, isImageWithLabel]);\n\n if (!stopper) {\n return null;\n }\n\n const { hasInstantConnect, shortDescription, title } = stopper;\n\n const showOfferDetails = () => {\n specialOfferAnalytics.showPromoDetails(stopper);\n dispatch(toggleIsShowSpecOffer(false));\n dispatch(viewOffer(stopper, false));\n };\n\n const handleShowAllOffers = () => {\n specialOfferAnalytics.showAllPromo(stopper);\n dispatch(toggleIsShowSpecOffer(false));\n };\n\n const onCloseStopper = () => {\n dispatch(toggleIsShowSpecOffer(false));\n onClose && onClose();\n };\n\n return (\n \n \n \n \n \n

    {title}

    \n \n
    \n {hasInstantConnect && (\n \n Подробнее\n \n )}\n
    \n\n \n \n {hasOtherOffers && (\n \n \n \n )}\n \n
    \n
    \n\n \n \n Изображение подарка\n \n \n
    \n );\n};\n\nexport default styled(SpecialOfferPopup)`\n background: unset;\n background-color: ${COLORS.BgMain};\n ${progressiveBackground({ src: StopperDesktopBackground, webpSrc: StopperDesktopBackgroundWebp })};\n background-repeat: no-repeat;\n background-size: cover;\n overflow: hidden;\n\n ${TextWrapper} {\n max-width: 336px;\n }\n\n & > ${NonStaticContainer} {\n width: 170px;\n height: 148px;\n\n img,\n picture {\n width: 100%;\n height: 100%;\n object-position: center;\n object-fit: contain;\n }\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n ${progressiveBackground({ src: StopperMobileBackground, webpSrc: StopperMobileBackgroundWebp })};\n\n ${TextWrapper} {\n max-width: calc(100% - 36px);\n }\n\n & > ${NonStaticContainer} {\n width: 105px;\n height: 91px;\n }\n }\n`;\n","import { useMemo } from 'react';\n\nimport { getABNVariant } from '~/src/helpers/abn-tests';\n\nexport const useLabelAbnTest = () => useMemo(() => getABNVariant('label_thank_you_page') === 'label_thank_you_page_on', []);\n","import { memo, useMemo } from 'react';\nimport { batch, shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport { useRouter } from 'next/router';\n\nimport { ISpecOffer } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers';\n\nimport SpeedBonusConnection from '~/src/entities/speed-bonus';\nimport SpecialOfferPopup from '~/src/features/payments-abn/components/SpecialOffer/SpecialOfferPopup';\nimport { toggleIsShowSpecOffer } from '~/src/features/payments-abn/store/actionCreators';\nimport { specialOfferAnalytics } from '~/src/features/specialOffersContainer/analytics';\nimport { DefaultCallback } from '~/src/features/specialOffersContainer/constants';\nimport LkPromotionalPopup from '~/src/features/specialOffersContainer/containers/LkPromotionalPopup';\nimport {\n PromoConnectedPopup,\n PromoConnectionPopup,\n PromoErrorPopup,\n PromoNeedPaymentPopup,\n PromoNeedSetPhonePopup,\n} from '~/src/features/specialOffersContainer/containers/popups';\nimport SpecOfferDetails from '~/src/features/specialOffersContainer/containers/SpecOfferDetails';\nimport { isNewDetailsDesign } from '~/src/features/specialOffersContainer/helpers';\nimport { useCallbackMap, useConnectOffer } from '~/src/features/specialOffersContainer/hooks';\nimport { setIsPopupOpened, setPopupState, setSelectedOfferId } from '~/src/features/specialOffersContainer/store/actions';\nimport { viewOffer } from '~/src/features/specialOffersContainer/store/actions/thunk';\nimport { selectNewOrViewedOffers, selectOffer } from '~/src/features/specialOffersContainer/store/selectors';\nimport { TState } from '~/src/store';\n\nconst SpecialOffer = (): JSX.Element => {\n const dispatch = useDispatch();\n\n const {\n specOffers: { isPopupOpened, popupState },\n popupOffer,\n stoppers: { stopper },\n } = useSelector((state: TState) => ({\n specOffers: state.specOffers,\n popupOffer: selectOffer(state),\n stoppers: selectNewOrViewedOffers(state),\n }), shallowEqual);\n\n const router = useRouter();\n\n const { referrer = '/lk' } = router.query;\n\n const callbackMap = useCallbackMap('lk');\n\n const { activateButtonText, connectOffer } = useConnectOffer(callbackMap, stopper);\n\n const isNewOfferDetails = useMemo(\n () => popupOffer?.isShowNewDetail && isNewDetailsDesign(),\n [popupOffer?.isShowNewDetail],\n );\n\n const connectHandler = () => {\n dispatch(toggleIsShowSpecOffer(false));\n\n if (!stopper?.hasInstantConnect) {\n specialOfferAnalytics.showPromoDetails(stopper);\n dispatch(viewOffer(stopper, false));\n return;\n }\n\n dispatch(setSelectedOfferId(stopper?.requestId));\n\n if (!stopper?.navigation?.type) {\n specialOfferAnalytics.instantConnect(stopper);\n\n switch (true) {\n case !!stopper.paySum:\n dispatch(setPopupState('needPayment'));\n return;\n case stopper.billingState !== 'connected' && (stopper.benefits?.some(({ needPhone }) => needPhone) ?? false):\n dispatch(setPopupState('needSetPhone'));\n return;\n default:\n dispatch(setPopupState('needConfirmation'));\n return;\n }\n }\n\n connectOffer();\n };\n\n const handleRedirect = () => {\n router.push(referrer);\n };\n\n const onClosePopup = () => {\n batch(() => {\n dispatch(setPopupState('none'));\n dispatch(setIsPopupOpened(false));\n });\n\n handleRedirect();\n };\n\n const promoPopupProps = {\n isPopupOpen: isPopupOpened,\n offer: popupOffer,\n callbackMap: callbackMap,\n onClose: onClosePopup,\n };\n\n return (\n \n \n\n {isNewOfferDetails\n ? \n : \n }\n\n \n\n \n\n \n\n \n\n \n \n );\n};\n\nexport default memo(SpecialOffer);\n","import { useCallback, useMemo } from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { EResultPopupStatus } from '@r1-frontend/ui-react/components/popups/popupResult';\nimport { RubleSymbol } from '@r1-frontend/ui-react/experimental/purchase/cost/Cost/RubleSymbol';\nimport { pluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { bonusPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\n\nimport { getIsAbnLoyaltyProgramEnabled } from '~/src/features/domru-bonus/constants/abnVariants';\nimport { selectCardPaySum } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/selectors/selectPaymentSum';\nimport { TState } from '~/src/store';\n\ninterface IPopupData {\n type: EResultPopupStatus,\n title: string,\n text?: string,\n isNeedSupport?: boolean,\n isBonusesPaymentSuccessfull?: boolean,\n}\n\nconst defaultPopupData: IPopupData = {\n type: EResultPopupStatus.DEFAULT,\n title: '',\n};\n\nexport const usePaymentResult = (): IPopupData => {\n const {\n auth: { clientPersonal },\n payment: { paymentData: { paymentSum, bonusesValue, isUseBonuses, isConnectAutoPay }, result },\n } = useSelector((state: TState) => state);\n\n const cardPaymentSum = useSelector(selectCardPaySum);\n const bonuses = useMemo(\n () => getIsAbnLoyaltyProgramEnabled() ? bonusesValue * 0.2 : bonusesValue,\n [bonusesValue],\n );\n\n const { payStatus, isPayCardSuccess, isBonusesSuccess, isAutoPaySuccess, queryAgreement } = result;\n const { agreement } = clientPersonal || {};\n const bonusesWithText = `${bonusesValue} ${pluralize(bonuses, bonusPluralize)}`;\n\n const setPaymentResultByStatus = useCallback((): IPopupData => {\n if (payStatus === 1) {\n const text = (bonuses && isUseBonuses)\n ? isBonusesSuccess\n ? `Баланс пополнен на ${paymentSum} ${RubleSymbol}. Списали с бонусного счёта ${bonusesWithText}.`\n : `Баланс пополнен на ${cardPaymentSum} ${RubleSymbol}. Но нам не удалось списать с бонусного счёта ${bonusesWithText}. `\n : '';\n\n return {\n type: EResultPopupStatus.SUCCESS,\n title: `Оплата по договору ${queryAgreement || agreement} прошла`,\n text,\n isNeedSupport: (isUseBonuses && !isBonusesSuccess),\n };\n } else {\n const baseInfo = 'Если через 15 минут не удастся зачислить деньги на ваш лицевой счёт, вернём их вам на карту.';\n const text = (bonuses && isUseBonuses)\n ? isBonusesSuccess\n ? `Баланс будет пополнен на ${cardPaymentSum} ${RubleSymbol}. С бонусного счета списали ${bonusesWithText}. ${baseInfo}`\n : `${baseInfo} Ещё нам не удалось списать ${bonusesWithText} с бонусного счета. `\n : baseInfo;\n\n return {\n type: EResultPopupStatus.DEFAULT,\n title: 'Платёж в обработке',\n text,\n isNeedSupport: (isUseBonuses && !isBonusesSuccess),\n };\n }\n }, [agreement, queryAgreement, bonusesWithText, isBonusesSuccess, isUseBonuses, bonuses, cardPaymentSum, payStatus, paymentSum]);\n\n const setCardPaymentResult = useCallback((): IPopupData => {\n return (isPayCardSuccess && (payStatus === 1 || payStatus === 2))\n ? setPaymentResultByStatus()\n : {\n type: EResultPopupStatus.ERROR,\n title: (bonuses && !isBonusesSuccess) ? 'Платёж не прошёл, бонусы не списали' : 'Оплата не прошла',\n // eslint-disable-next-line max-len\n text: (bonuses && isBonusesSuccess) ? 'К сожалению, бонусами не получится оплатить оборудование. Но не пугайтесь, они никуда не пропали. Мы только что перенесли ваши бонусы на счёт договора. Теперь вы можете оплатить покупку. ' : '',\n isNeedSupport: true,\n isBonusesPaymentSuccessfull: isBonusesSuccess,\n };\n }, [isBonusesSuccess, isPayCardSuccess, payStatus, bonuses, setPaymentResultByStatus]);\n\n const setBonusesPaymentResult = useCallback((): IPopupData => {\n return isBonusesSuccess\n ? {\n type: EResultPopupStatus.SUCCESS,\n title: `Вы оплатили услуги по договору ${queryAgreement || agreement}`,\n text: `Баланс пополнен на ${bonuses} ${RubleSymbol} — вы оплатили всю сумму бонусами.`,\n }\n : {\n type: EResultPopupStatus.ERROR,\n title: 'Платёж не прошёл, бонусы не списали. ',\n isNeedSupport: true,\n };\n }, [agreement, queryAgreement, isBonusesSuccess, bonuses]);\n\n const setAutoPayConnectResult = useCallback((): IPopupData => {\n return isAutoPaySuccess\n ? {\n type: EResultPopupStatus.SUCCESS,\n title: 'Вы подключили автоплатёж',\n }\n : {\n type: EResultPopupStatus.ERROR,\n title: 'Не удалось подключить автоплатёж. ',\n isNeedSupport: true,\n };\n }, [isAutoPaySuccess]);\n\n switch (true) {\n case !!cardPaymentSum:\n return setCardPaymentResult();\n case !!bonusesValue:\n return setBonusesPaymentResult();\n case (!cardPaymentSum && !bonuses && isConnectAutoPay):\n return setAutoPayConnectResult();\n default:\n return defaultPopupData;\n }\n};\n","import { useCallback, useEffect, useMemo, useState } from 'react';\nimport { shallowEqual, useDispatch, useSelector } from 'react-redux';\nimport Link from 'next/link';\nimport { useRouter } from 'next/router';\n\nimport { SegmentedBannerGrid } from '~/src/components/SegmentedBanner/SegmentedBannerGrid';\nimport { PaymentBlock } from '~/src/features/payments-abn/components/PaymentBlock';\nimport ResultPopup, { IPopupState } from '~/src/features/payments-abn/components/PopupResult';\nimport PaymentUnauthLayout from '~/src/features/payments-unauth-abn';\nimport { loadOffers } from '~/src/features/specialOffersContainer/store/actions/thunk';\nimport { selectNewOrViewedOffers } from '~/src/features/specialOffersContainer/store/selectors';\nimport { getABNVariant } from '~/src/helpers/abn-tests';\nimport { SHOW_SEASON_TICKET } from '~/src/helpers/city';\nimport { TState } from '~/src/store';\nimport { getClientPayment } from '~/src/store/actions/auth/getClientPayment';\nimport { openChat } from '~/src/store/actions/chat';\nimport { getLoyaltyAvailability } from '~/src/store/actions/loyalty';\nimport { fetchSeasonTickets } from '~/src/store/actions/wholesaleCheaper';\n\nimport AgreementInfo from './components/AgreementInfo';\nimport CardsList from './components/CardsList';\nimport MobileAppPopup from './components/MobileAppPopup';\nimport { mobileAppPopupAnalytics } from './components/MobileAppPopup/analytics';\nimport PaymentCheck from './components/PaymentCheck';\nimport PaymentType from './components/PaymentType';\nimport SeasonTicketPayment from './components/SeasonTicketPayment';\nimport SpecialOffer from './components/SpecialOffer';\nimport { pushDataLayer } from './helpers/pushDataLayer';\nimport { usePaymentResult } from './hooks/usePaymentResult';\nimport { EPaymentTypeIds, setPaymentMethod, setPaymentResult } from './store/actionCreators';\nimport { showSpecOffer } from './store/actions';\nimport { initialPaymentResult } from './store/reducers';\n\nimport * as ST from './styled';\n\nconst PaymentsLayout = (): JSX.Element => {\n const router = useRouter();\n const dispatch = useDispatch();\n const {\n isAuth,\n payment: { paymentTypeId, result: { isOpenPopup, payStatus } },\n wholesaleCheaperData,\n stoppers: { stopper },\n } = useSelector((state: TState) => ({\n isAuth: state.auth.isAuth,\n payment: state.payment,\n wholesaleCheaperData: state.wholesaleCheaperData.wholesaleCheaperData,\n stoppers: selectNewOrViewedOffers(state),\n }), shallowEqual);\n\n const [isShowMobileAppPopup, setIsShowMobileAppPopup] = useState(false);\n\n const showSeasonTicketVar = getABNVariant(SHOW_SEASON_TICKET.testName);\n const isShowSeasonTicket = showSeasonTicketVar === SHOW_SEASON_TICKET.variants.SHOW;\n\n const popupData = usePaymentResult();\n\n /**\n * @param deliveryRequestId используется при покупке оборудования (доставка), для прокидывания идентификатора заказа в \"платеж\"\n * тк для доставки доступна только оплата картой, то за счет этого флага происходит скрытие выбора других способов оплаты, см :119 line\n *\n * @param referrer используется для редиректа на необходимую страницу после успешной оплаты\n */\n const { s: queryPaySum = '', referrer = null } = router.query;\n\n useEffect(() => {\n if (isAuth && !wholesaleCheaperData) {\n dispatch(fetchSeasonTickets());\n }\n }, [isAuth, wholesaleCheaperData]);\n\n useEffect(() => {\n if (isAuth) {\n dispatch(getLoyaltyAvailability());\n dispatch(loadOffers(true));\n }\n }, [isAuth]);\n\n useEffect(() => {\n if (payStatus && payStatus > 0) {\n dispatch(getClientPayment());\n }\n }, [payStatus]);\n\n const preparePopupText = useCallback(() => {\n const { text, isNeedSupport, isBonusesPaymentSuccessfull } = popupData;\n\n return (!!text || isNeedSupport)\n ? \n {isNeedSupport && !isBonusesPaymentSuccessfull\n ? <>\n {text}Попробуйте ещё раз или напишите в 

    dispatch(openChat())}>поддержку

    \n \n : text\n }\n
    \n : <>;\n }, [dispatch, popupData]);\n\n const currentPopupData = useMemo(() => {\n const currentText = preparePopupText();\n\n return {\n ...popupData,\n isOpen: isOpenPopup,\n text: currentText,\n };\n }, [preparePopupText, popupData, isOpenPopup]);\n\n const onSuccessPayment = () => {\n if (stopper) {\n dispatch(showSpecOffer());\n } else {\n setIsShowMobileAppPopup(true);\n mobileAppPopupAnalytics.show();\n }\n };\n\n const onClosePopup = useCallback(() => {\n if (popupData.type === 'success') {\n onSuccessPayment();\n }\n\n dispatch(setPaymentResult(initialPaymentResult));\n dispatch(setPaymentMethod(null));\n }, [popupData.type, onSuccessPayment]);\n\n const onCloseMobileAppPopup = () => {\n setIsShowMobileAppPopup(false);\n\n const mainPageUrl = isAuth ? '/lk' : '/';\n router.push(referrer ? referrer : mainPageUrl);\n };\n\n const hasAvailableSeasonTicket = !!wholesaleCheaperData?.availableFlags.length;\n\n return (\n \n {isAuth\n ? <>\n Оплата услуг\n \n \n \n \n pushDataLayer('click on configure', 'click')}>Настроить\n \n \n \n \n \n \n {(hasAvailableSeasonTicket && isShowSeasonTicket)\n ? \n : <>\n }\n {(paymentTypeId === EPaymentTypeIds.WHOLESALE && isShowSeasonTicket)\n ? hasAvailableSeasonTicket ? : null\n : <>\n \n \n \n \n \n }\n \n \n \n \n : \n }\n \n );\n};\n\nexport default PaymentsLayout;\n","import { LazyLoadImage } from 'react-lazy-load-image-component';\nimport styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { BorderRadius } from '@r1-frontend/ui-react/tokens/borderRadius';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const BannerSection = styled.div`\n width: 100%;\n background-color: ${COLORS.BgSurface};\n flex-direction: column;\n padding: 24px;\n border-radius: ${BorderRadius.OuterBlockRadius};\n overflow: hidden;\n position: relative;\n z-index: 2;\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n border-radius: ${BorderRadius.componentRadius};\n }\n`;\n\nexport const Image = styled(LazyLoadImage)`\n position: absolute;\n margin: auto;\n right: 0;\n top: 40px;\n bottom: 0;\n max-height: 100%;\n z-index: -1;\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n left: 61%;\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n right: 40px;\n top: 10px;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n left: 60%;\n right: 0;\n }\n`;\n\nexport const InfoBlock = styled.div`\n flex-direction: column;\n`;\n\nexport const Title = styled.div`\n max-width: 174px;\n ${FONTS.H3};\n margin-bottom: 4px;\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n ${FONTS.H4};\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n max-width: 100%;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n max-width: 174px;\n }\n`;\n\nexport const Subtitle = styled.div`\n ${FONTS.S};\n\n @media (max-width: ${wideBreakpoints.sDesktop}) {\n width: 195px;\n }\n\n @media (max-width: ${wideBreakpoints.laptop}) {\n ${FONTS.XS};\n }\n\n @media (max-width: ${wideBreakpoints.tablet}) {\n width: auto;\n }\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n width: 195px;\n }\n`;\n\nexport const ButtonBlock = styled.div`\n gap: 12px;\n margin-top: 16px;\n flex-direction: column;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n\n > a {\n width: fit-content;\n }\n`;\n","import { useCallback, useEffect, useState } from 'react';\n\nimport { dataLayerPush } from '@r1-frontend/analytics/dataLayerPush';\n\nimport { BaseButton, btnSizes, btnTypes } from '@r1-frontend/ui-react/components/buttons/baseButton';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport WebpImage from '@r1-frontend/ui-react/components/WebpImage';\nimport { CATEGORIES, EVENTS } from '@r1-frontend/shared/constants/analytics';\nimport { useMatchMedia } from '@r1-frontend/shared/hooks/useMatchMedia';\n\nimport * as ST from './styled';\n\nconst PaymentBanner = (): JSX.Element => {\n const isLaptop = useMatchMedia(`(max-width: ${wideBreakpoints.laptop})`);\n const isTablet = useMatchMedia(`(max-width: ${wideBreakpoints.tablet})`);\n const isMobile = useMatchMedia(`(max-width: ${wideBreakpoints.mobile})`);\n\n const [isShowIOSButton, setIsShowIOSButton] = useState(false);\n const [isShowAndroidButton, setIsShowAndroidButton] = useState(false);\n const [devicePlatform, setDevicePlatform] = useState('');\n\n const coverImgDesktop = '/static/images/payments-abn/desktop-banner.png';\n const coverImgWebpDesktop = '/static/images/payments-abn/desktop-banner.webp';\n\n const coverImgMobile = '/static/images/payments-abn/mobile-banner.png';\n const coverImgWebpMobile = '/static/images/payments-abn/mobile-banner.webp';\n\n const webpImage = isTablet ? coverImgWebpMobile : coverImgWebpDesktop;\n const pngImage = isTablet ? coverImgMobile : coverImgDesktop;\n\n useEffect(() => {\n if (typeof window !== 'undefined') {\n setDevicePlatform(window.navigator.platform);\n }\n }, []);\n\n useEffect(() => {\n if (devicePlatform && isMobile) {\n if (devicePlatform.indexOf('Mac') === 0 || devicePlatform === 'iPhone' || devicePlatform.indexOf('iPad') === 0) {\n setIsShowIOSButton(true);\n } else if (devicePlatform.indexOf('Linux') === 0 || devicePlatform.indexOf('Win32') === 0) {\n setIsShowAndroidButton(true);\n }\n } else {\n setIsShowAndroidButton(false);\n setIsShowIOSButton(false);\n }\n }, [isMobile, devicePlatform]);\n\n const onDataLayerPush = useCallback(() => {\n if (devicePlatform) {\n dataLayerPush({\n event: EVENTS.UAevent,\n category: CATEGORIES.newPayment,\n action: 'click on download app',\n label: `click ${devicePlatform}`,\n });\n }\n }, []);\n\n return (\n \n \n \n \n \n \n Ваш Дом.ру в ваших руках\n \n \n Платить в приложении удобнее\n \n \n {!isShowAndroidButton && (\n onDataLayerPush()}\n size={isLaptop ? btnSizes.SMALL : btnSizes.LARGE}\n />\n )}\n {!isShowIOSButton && (\n onDataLayerPush()}\n size={isLaptop ? btnSizes.SMALL : btnSizes.LARGE}\n />\n )}\n \n \n \n );\n};\n\nexport default PaymentBanner;\n","import styled from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { TickCircle } from '@r1-frontend/ui-react/components/svg/main';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const PopupWrapper = styled.div`\n padding: 32px;\n max-width: 600px;\n display: flex;\n flex-direction: column;\n align-items: start;\n justify-content: space-between;\n`;\n\nexport const PopupSuccessIcon = styled(TickCircle)`\n #contour,\n #guts {\n stroke: ${COLORS.Success};\n }\n`;\n\nexport const PopupErrorIcon = styled.i`\n display: flex;\n justify-content: center;\n align-items: center;\n padding: 7px;\n border: 1.5px solid ${COLORS.Locked};\n border-radius: 50%;\n\n & > svg {\n #guts {\n stroke: ${COLORS.Locked};\n }\n }\n`;\n\nexport const PopupTitle = styled.div`\n width: 100%;\n color: ${COLORS.TextPrimary};\n ${FONTS.H3};\n margin: 16px 0;\n max-width: 500px;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n max-width: 300px;\n }\n\n @media (max-width: ${wideBreakpoints.sMobile}) {\n max-width: 200px;\n } \n`;\n\nexport const PopupText = styled.div`\n ${FONTS.MediumS};\n color: ${COLORS.TextInfo};\n margin-bottom: 16px;\n`;\n\nexport const PopupButtonsWrapper = styled.div`\n justify-content: start;\n gap: 12px;\n width: 100%;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n flex-direction: column;\n }\n`;\n","import { ReactElement } from 'react';\n\nimport DefaultPopup, { IDefaultPopup } from '@r1-frontend/ui-react/components/popups/defaultPopup';\nimport { Close } from '@r1-frontend/ui-react/components/svg/main';\n\nimport * as ST from './styled';\n\ninterface IProps extends IDefaultPopup {\n message: string,\n positive?: boolean,\n icon?: boolean,\n text?: string,\n buttons: (onClose: () => void) => ReactElement[],\n}\n\nexport const LkPromotionalPopupExtra = ({\n message,\n positive,\n icon = true,\n text,\n buttons,\n onClose,\n ...props\n}: IProps) => {\n return (\n \n \n {icon && (\n positive\n ? \n : \n \n \n )}\n \n {message}\n \n {text && \n {text}\n }\n \n {buttons(onClose)}\n \n \n \n );\n};\n","import { batch, useDispatch } from 'react-redux';\nimport Link from 'next/link';\n\nimport { ISpecOffer } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { IDefaultPopup } from '@r1-frontend/ui-react/components/popups/defaultPopup';\n\nimport { LkPromotionalPopupExtra } from '~/src/features/specialOffersContainer/containers/popups/LkPromotionalPopupExtra';\nimport { setIsPopupOpened, setPopupState } from '~/src/features/specialOffersContainer/store/actions';\n\nexport const PromoConnectedPopup = ({ offer: { billingState }, ...props }: IDefaultPopup & { offer: ISpecOffer }) => {\n const dispatch = useDispatch();\n\n const clickHandler = () => {\n batch(() => {\n dispatch(setPopupState('none'));\n dispatch(setIsPopupOpened(false));\n });\n };\n\n return (\n [\n \n \n ,\n ]}\n {...props}\n />\n );\n};\n","import { useCallback, useState } from 'react';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { ButtonGroup } from '@r1-frontend/ui-react/components/buttons/buttonGroup/ButtonGroup';\nimport PopupResult from '@r1-frontend/ui-react/components/popups/popupResult';\n\nimport { DefaultCallback } from '~/src/features/specialOffersContainer/constants';\nimport { IProps } from '~/src/features/specialOffersContainer/types';\nimport { capitalize } from '~/src/helpers/string';\n\nconst PromoConnectionPopup = ({ isPopupOpen, offer, callbackMap, onClose }: IProps): JSX.Element => {\n const { billingState, isLoading, isConnecting } = offer || {};\n\n const [isLocalLoading, setIsLocalLoading] = useState(false);\n\n const actionText = billingState === 'connected' ? 'отключить' : 'подключить';\n\n const onConnectHandler = useCallback(async() => {\n if (!offer) {\n return;\n }\n\n setIsLocalLoading(true);\n const { callback } = callbackMap['onActivate'](offer);\n await callback().finally(() => setIsLocalLoading(false));\n }, [callbackMap, offer]);\n\n return (\n \n \n \n {capitalize(actionText)}\n \n \n Закрыть\n \n \n \n );\n};\n\nexport default PromoConnectionPopup;\n","import { useSelector } from 'react-redux';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { IDefaultPopup } from '@r1-frontend/ui-react/components/popups/defaultPopup';\n\nimport { LkPromotionalPopupExtra } from '~/src/features/specialOffersContainer/containers/popups/LkPromotionalPopupExtra';\nimport { TState } from '~/src/store';\n\nexport const PromoErrorPopup = (props: IDefaultPopup) => {\n const errorMessage = useSelector((state: TState) => state.specOffers.errorMessage);\n\n return [\n \n Закрыть\n ,\n ]}\n {...props}\n />;\n};\n","import { useMemo } from 'react';\nimport { batch, useDispatch } from 'react-redux';\nimport Link from 'next/link';\nimport { stringify } from 'qs';\nimport { v4 as createGuid } from 'uuid';\n\nimport { ISpecOffer } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { IDefaultPopup } from '@r1-frontend/ui-react/components/popups/defaultPopup';\nimport { RubleSymbol } from '@r1-frontend/ui-react/tokens/symbols';\n\nimport { createTransaction } from '~/src/features/payments-abn/store/actions';\nimport { specialOfferAnalytics } from '~/src/features/specialOffersContainer/analytics';\nimport { LkPromotionalPopupExtra } from '~/src/features/specialOffersContainer/containers/popups/LkPromotionalPopupExtra';\nimport { setIsPopupOpened, setOfferTransaction, setPopupState } from '~/src/features/specialOffersContainer/store/actions';\n\nexport const PromoNeedPaymentPopup = ({ offer, ...props }: IDefaultPopup & { offer: ISpecOffer }) => {\n const transaction = createGuid();\n\n const paymentUrl = useMemo(() => `/payments?${stringify({ s: offer.paySum, transaction })}`, [offer.paySum, transaction]);\n\n const dispatch = useDispatch();\n\n const onPayHandler = () => {\n batch(() => {\n dispatch(createTransaction(transaction));\n dispatch(setOfferTransaction(transaction));\n dispatch(setPopupState('none'));\n dispatch(setIsPopupOpened(false));\n });\n specialOfferAnalytics.refillBalance(`discounts:${offer.title}`);\n };\n\n return (\n [\n \n \n Пополнить\n \n ,\n \n Закрыть\n ,\n ]}\n {...props}\n />\n );\n};\n","import { TSpecOfferSetPhoneRequest } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers/set-phone/dto/requestDto';\n\nimport { IRequest } from '@r1-frontend/shared/types/IRequest';\n\nexport const formatPhone = ([, ...rest]: string) => ['8', ...rest].join('');\n\n/**\n * Добавление номера телефона к договору для подписок (IVI, Кинопоиск и тд) в биллинге\n * @link https://master.spec-offer.sandbox.d2c.r-one.io/docs#/Специальные%20предложения/SpecOfferController_setPhone\n */\nexport const setPhone = (providerId: number, payload: TSpecOfferSetPhoneRequest): IRequest => ({\n uri: `/api/v1/${providerId}/set-phone`,\n method: 'POST',\n withAuth: true,\n withProvider: true,\n body: JSON.stringify(payload),\n});\n","import styled, { css } from 'styled-components';\n\nimport Button from '@r1-frontend/ui-react/components/buttons/button';\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nexport const PopupSetPhoneWrapper = styled.section<{\n isSelectInputable: boolean,\n useMargin?: boolean,\n}>`\n display: flex;\n width: ${({ isSelectInputable }) => isSelectInputable ? '448px' : '224px'};\n gap: 12px;\n\n ${({ isSelectInputable }) => isSelectInputable && `\n div {\n &:last-child {\n margin-bottom: 0;\n }\n }\n `}\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n flex-direction: column;\n width: 100%;\n }\n\n /**\n * Уберет абсолюты для выпадающего списка, т.к внутри\n * попапа это не нужно\n */\n & > div {\n &:first-child {\n & > div > div {\n &:last-child {\n position: relative;\n margin-top: 10px !important;\n }\n }\n }\n\n &:last-child input {\n ${({ useMargin }) => useMargin && css`\n margin-top: 10px;\n \n @media (max-width: ${wideBreakpoints.mobile}) {\n margin: 0;\n }\n `}\n }\n }\n`;\n\nexport const PopupSetPhoneError = styled.span`\n ${FONTS.MediumXXS}\n color: ${COLORS.Error};\n`;\n\nexport const PopupSetPhoneButton = styled(Button)<{ useMargin?: boolean }>`\n height: fit-content;\n\n ${({ useMargin }) => useMargin && css`\n margin-top: 10px;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n margin: 0;\n }\n `}\n`;\n","import React, { useCallback, useMemo, useState } from 'react';\nimport cookie from 'react-cookies';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport { setPhone } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers';\nimport { formatPhone } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers/set-phone';\nimport { TSpecOfferSetPhoneResponse } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers/set-phone/dto/responseDto';\n\nimport { IDefaultPopup } from '@r1-frontend/ui-react/components/popups/defaultPopup';\nimport { CreatablePhoneSelect, IOption } from '@r1-frontend/ui-react/components/select/creatableSelect';\n\nimport { specialOfferAnalytics } from '~/src/features/specialOffersContainer/analytics';\nimport { DefaultCallback } from '~/src/features/specialOffersContainer/constants';\nimport { LkPromotionalPopupExtra } from '~/src/features/specialOffersContainer/containers/popups/LkPromotionalPopupExtra';\nimport { setPopupState } from '~/src/features/specialOffersContainer/store/actions';\nimport { TSpecOffer } from '~/src/features/specialOffersContainer/types';\nimport { TPromoCallbackMap } from '~/src/features/specialOffersContainer/types';\nimport { TState } from '~/src/store';\n\nimport * as ST from './styled';\n\nexport const PromoNeedSetPhonePopup = ({\n offer,\n onActivate,\n ...props\n}: IDefaultPopup & Pick, 'onActivate'> & {\n offer: TSpecOffer,\n }) => {\n const { clientContacts } = useSelector((state: TState) => state.auth);\n\n const [isLocalLoading, setIsLocalLoading] = useState(false);\n const [phoneOptions, setPhoneOptions] = useState(\n (clientContacts?.phone?.filter(({ status }) => status === 'confirmed') || []).map((item) => ({\n label: item.value,\n value: `${item.id}`,\n })),\n );\n const [inputValue, setInputValue] = useState();\n const [selectedPhone, setSelectedPhone] = useState(\n phoneOptions.slice(0, 1)[0] || {\n value: 0,\n label: '',\n },\n );\n const [isNumberUsed, setIsNumberUsed] = useState(false);\n const [useMargin, setUseMargin] = useState(true);\n\n const subscriptions = useMemo(\n () =>\n (offer.benefits || [])\n .filter(({ needPhone }) => needPhone)\n .map(({ title }) => title)\n .join(', '),\n [offer],\n );\n const dispatch = useDispatch();\n\n const onInputChange = useCallback((option: IOption) => {\n setInputValue(option);\n\n const { value } = option;\n const phoneValue = value || '';\n\n if (phoneValue && phoneValue.length < 11) {\n return;\n }\n\n const newOption = {\n value,\n label: value,\n };\n\n setPhoneOptions([\n ...phoneOptions,\n { ...newOption },\n ]);\n setSelectedPhone(newOption);\n }, [phoneOptions]);\n\n const onSetPhone = useCallback(async() => {\n const { value, label } = selectedPhone;\n const providerId = cookie.load('providerId');\n\n const phoneParam = value === label\n ? { phone: formatPhone(value) }\n : { contactId: value };\n\n setIsLocalLoading(true);\n\n const response = await doRequest.specOffer(\n setPhone(providerId, {\n requestId: offer.requestId,\n ...phoneParam,\n }),\n );\n\n setIsLocalLoading(false);\n\n if (!response.isSuccess) {\n specialOfferAnalytics.errorPhoneCheck(offer);\n return dispatch(setPopupState('connectionError'));\n }\n\n const { payload } = response;\n\n setIsNumberUsed(!payload);\n\n if (payload) {\n const { callback } = onActivate(offer);\n\n callback();\n specialOfferAnalytics.successPhoneCheck(offer);\n }\n }, [offer, onActivate, selectedPhone]);\n\n const onPhoneChange = useCallback((option: IOption) => {\n setSelectedPhone(option);\n setInputValue(undefined);\n setIsNumberUsed(false);\n }, []);\n\n return (\n [\n \n setUseMargin(false)}\n onMenuClose={() => setUseMargin(true)}\n masked\n />\n ,\n \n {isNumberUsed\n ? `На данный номер телефона уже подключена подписка ${subscriptions}. Введите другой номер.`\n : null}\n ,\n \n Продолжить\n ,\n ]}\n {...props}\n />\n );\n};\n","// Тарифы на главной между баннерами\nexport const TARIFF_BETWEEN_BANNERS = {\n testName: 'tariff_card_between_banners',\n variants: {\n ENABLED: 'tariff_card_up',\n DISABLED: 'tariff_card_down',\n },\n};\n\n// яндекс поиск\nexport const YA_SEARCH = {\n testName: 'yasearch',\n variants: {\n enabled: 'included',\n disabled: 'disabled',\n },\n};\n\nexport const FAQ_REDESIGN = {\n testName: 'faq_redesign',\n variants: {\n FAQ_NEW: 'faq_new',\n },\n};\n\n// показывать абонементы\nexport const SHOW_SEASON_TICKET = {\n testName: 'show_season_ticket',\n variants: {\n SHOW: 'show_season_ticket',\n HIDE: 'do_not_show_season_ticket',\n },\n};\n\n// Подключение без визита\nexport const ONLINE_BUY = {\n testName: 'online_buy',\n variants: {\n ENABLED: 'online_buy_enable',\n DISABLED: 'online_buy_disable',\n },\n};\n\n","import { useRouter } from 'next/router';\n\n/**\n * @deprecated использовать useRouter\n */\nexport const usePrepareQueryData = (): Record => {\n const { query } = useRouter();\n const _query: Record = {};\n\n for (const key in query) {\n const _value = query[key];\n _query[key] = _value ? (typeof _value === 'string' ? _value : _value[0]) : '';\n }\n\n return _query;\n};\n","import { replaceValueForPhone } from '@r1-frontend/ui-react/components/inputSimple/decorators/helpers/phoneDecorator';\n\ninterface IFormatValueForPhoneWithSpaces {\n value: string,\n isMasked?: boolean,\n label?: string,\n}\n\nexport const formatValueForPhoneWithSpaces = ({ value, isMasked, label = '' }: IFormatValueForPhoneWithSpaces) => {\n if (isMasked) {\n return value.replace(/(\\+7|7|8)(\\d{3})(\\*{3})(\\*+\\d{1})(\\d{2})/, `${label} $2 $3 $4 $5`);\n }\n const digitsOnly = replaceValueForPhone(value);\n return (\n `${label} ${digitsOnly.slice(1, 4)} ${digitsOnly.slice(4, 7)} ${digitsOnly.slice(7, 9)} ${digitsOnly.slice(9)}`\n );\n};\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\nexport type { ISeasonTicketFlags } from './dto/ResponseDto';\n\n/**\n * Получение информации по активному и доступным абонементам\n * https://master.api-season-ticket.sandbox.d2c.r-one.io/docs/#/season-ticket/SeasonTicketController_getFlags\n * @returns ISeasonTicketFlags\n */\nexport const seasonTicketFlags = (providerId: number): IRequest => ({\n uri: `/api/v1/${providerId}/season-ticket/flags`,\n method: 'GET',\n withAuth: true,\n withProvider: true,\n});\n","import { ISeasonTicket } from '@r1-frontend/api-domru/api-season-ticket/v1/season-ticket/dto/ResponseDto';\n\nimport { IAction } from '~/src/store';\nimport { EWholesaleCheaperTypes } from '~/src/store/actionTypes/wholesaleCheaper';\n\nexport const setLoadingStatus = (status: boolean):\n IAction => ({\n type: EWholesaleCheaperTypes.SET_LOADING_STATUS,\n payload: status,\n });\n\nexport const setWholesaleCheaperData = (payload: ISeasonTicket | undefined):\n IAction => ({\n type: EWholesaleCheaperTypes.SET_WHOLESALE_CHEAPER_DATA,\n payload,\n });\n","import { doRequest } from '@r1-frontend/do-request';\nimport { ISeasonTicket } from '@r1-frontend/api-domru/api-season-ticket/v1/season-ticket/dto/ResponseDto';\nimport { ISeasonTicketFlags, seasonTicketFlags } from '@r1-frontend/api-domru/api-season-ticket/v1/season-ticket/flags';\n\nimport { TDispatch, TGetState } from '~/src/store';\nimport { setLoadingStatus, setWholesaleCheaperData } from '~/src/store/actionCreators/wholesaleCheaper';\n\nconst transformSeasonTickets = (_seasonTicketFlags: ISeasonTicketFlags): ISeasonTicket => {\n const { currentFlag, availableFlags } = _seasonTicketFlags;\n\n return {\n currentFlag: currentFlag.map(el => ({ ...el, paySum: 0 })),\n availableFlags: availableFlags.map(el => ({ ...el, paySum: 0 })),\n };\n};\n\nexport const fetchSeasonTickets = () => {\n return async(dispatch: TDispatch, getState: TGetState): Promise => {\n dispatch(setLoadingStatus(true));\n\n const {\n city: { provider: { providerId } },\n } = getState();\n\n const response = await doRequest.apiSeasonTicket(seasonTicketFlags(providerId));\n\n if (response.isSuccess) {\n const seasonTickets = transformSeasonTickets(response.payload);\n dispatch(setWholesaleCheaperData(seasonTickets));\n } else {\n dispatch(setWholesaleCheaperData(undefined));\n }\n\n dispatch(setLoadingStatus(false));\n };\n};\n","import get from 'lodash/get';\n\nimport { TState } from '~/src/store';\n\n// @todo remove lodash from getting value from expected and described structure `TState`\nexport function selectDomain(state: TState): string {\n return get(state, 'auth.billingDomain') || get(state, 'city.currentCity.domain');\n}\n\nexport function selectHostname(state: TState): string {\n const domain = get(state, 'auth.billingDomain');\n\n if (domain && domain !== 'interzet') {\n return 'https://' + domain + '.db.ertelecom.ru';\n } else {\n return get(state, 'city.currentCity.billingHost');\n }\n}\n","// https://kb.ertelecom.ru/pages/viewpage.action?pageId=195003438#:~:text=%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%20%D0%B4%D0%BB%D1%8F%20%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B8-,%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%20%D0%B4%D0%BE%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D0%BE%D0%B2%20%D0%BF%D0%BE%20%D0%BA%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D1%83%20%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D0%B0%2C%20%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%20%D0%BA%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D0%BE%D0%B2%20%D0%BF%D0%BE%20%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D1%83%20%D0%B4%D0%BE%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D0%B0,-%D0%9F%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%3A%C2%A0get_agr_list_contact%20(%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2\nimport { IRequest } from '@r1-frontend/shared/types/IRequest';\n\n/**\n * @param contact - контакт клиента (телефон, e-mail, номер договора или шифрованный номер договора)\n * @param isActive - Флаг активности договора, 1 - да (по умолчанию), 0 - нет\n * Получение договора по контактным данным для неавторизованных\n * https://master.api-profile.sandbox.d2c.r-one.io/docs/v1#/Unauth/7f32e4176e22c9a59cfee31b2319b4d8\n */\nconst getContracts = (contact: string | number, isActive = true): IRequest => ({\n uri: '/v1/unauth/contract-asterisked',\n method: 'GET',\n withProvider: true,\n withAuth: false,\n queryParams: {\n contact,\n isActive: isActive ? 1 : 0,\n },\n});\n\nexport type { ResponseDto, TContactData } from './dto/ResponseDto';\n\nexport default getContracts;\n","/**\n * Возвращает функцию для проверки принадлежности переданного значения указанному enum\n * @param e - enum\n * @returns isSomeEnum(Enum) => (value: any) => boolean;\n */\nexport const isSomeEnum = >(e: T) => (token: any): token is T[keyof T] => Object.values(e).includes(token as T[keyof T]);\n","import { useCallback, useState } from 'react';\n\ntype TUseModalParams = {\n initialOpen?: boolean,\n};\n\n/**\n * Позволяет избавиться от дублирования кода для модальный окон, попапов и т.д,\n * посредством того что скрывает вунтри себя состояния open / close\n */\n\nexport const useModal = (params: TUseModalParams = {}) => {\n const { initialOpen = false } = params;\n\n const [isOpen, setIsOpen] = useState(initialOpen);\n\n const openModal = useCallback(() => setIsOpen(true), []);\n const closeModal = useCallback(() => setIsOpen(false), []);\n const toggleModal = useCallback(() => setIsOpen(status => !status), []);\n\n return { isOpen, openModal, closeModal, toggleModal };\n};\n","import styled, { css } from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\nconst StylesTab = css`\n position: relative;\n padding: 6px 24px;\n border-style: solid;\n border-color: transparent;\n background: transparent;\n overflow: hidden;\n font: inherit;\n cursor: pointer;\n`;\n\nexport const Container = styled.div<{isDisabled : boolean, fontSize?: FONTS}>`\n width: fit-content;\n min-width: max-content;\n max-width: 600px;\n display: flex;\n position: relative;\n box-sizing: content-box;\n ${p => p.fontSize || FONTS.MediumXS};\n background-color: transparent;\n border-radius: 100px;\n border: 2px solid ${COLORS.Outline_Light};\n pointer-events: ${p => p.isDisabled ? 'none' : 'auto' };\n user-select: none;\n\n @media (max-width: ${wideBreakpoints.mobile}) {\n max-width: 300px;\n }\n`;\n\nexport const TabLeft = styled.button`\n ${StylesTab};\n border-width: 2px 0 2px 2px;\n border-radius: 100px 0 0 100px;\n`;\n\nexport const TabRight = styled.button`\n ${StylesTab};\n border-width: 2px 2px 2px 0;\n border-radius: 0 100px 100px 0;\n`;\n\nexport const LayoutLeft = styled.span<{translateValue: number, colorTab: string}>`\n position: absolute;\n top: 0;\n height: 100%;\n border-radius: 100px;\n transition: transform 100ms ease-in-out;\n width: 100%;\n right: 0;\n background-color: ${p => p.colorTab};\n transform: ${p => `translateX(${p.translateValue}%)`};\n`;\n\nexport const LayoutRight = styled(LayoutLeft)`\n right: 100%;\n`;\n\nexport const Text = styled.span<{ isActive: boolean, isDifferentColorText: boolean }>`\n position: relative;\n z-index: 1;\n color: ${(p) => p.isDifferentColorText && !p.isActive ? COLORS.TextPrimary : COLORS.TextWhite};\n white-space: pre;\n`;\n","import React, { FC } from 'react';\n\nimport * as ST from '@r1-frontend/ui-react/components/controls/Toggle/styled';\nimport { COLORS } from '@r1-frontend/ui-react/tokens/colors';\nimport { FONTS } from '@r1-frontend/ui-react/tokens/fonts';\n\ninterface IProps {\n textsValues: { leftText: string, rightText: string },\n isDisabled?: boolean,\n colorTab?: string,\n onChangeCallback: (activeTab: string) => void,\n activeTab: string,\n fontSize?: FONTS,\n isDifferentColorText?: boolean,\n}\n\nconst Toggle: FC = ({\n textsValues,\n isDisabled = false,\n colorTab = COLORS.ButtonPrimary,\n onChangeCallback,\n activeTab,\n fontSize,\n isDifferentColorText = true,\n ...args\n}) => {\n const translateData = { max: 100, min: 0 };\n const { leftText, rightText } = textsValues;\n const isRightTabActive = activeTab === rightText;\n\n const onClickHandler = () => {\n const activeText = isRightTabActive ? leftText : rightText;\n onChangeCallback(activeText);\n };\n\n return (\n \n \n \n \n {leftText}\n \n \n \n \n \n {rightText}\n \n \n \n );\n};\n\nexport default Toggle;\n","import { createSvg } from '@r1-frontend/ui-react/components/svg/createSvg';\n\nconst TicketDiscount = (\n {\n strokeWidth = 1.5,\n },\n): JSX.Element => {\n return (\n <>\n \n \n \n \n \n \n \n );\n};\n\nexport default createSvg(\n TicketDiscount,\n 'ticket-discount',\n);\n","import { createSvg } from '@r1-frontend/ui-react/components/svg/createSvg';\n\nconst WalletAdd = (\n {\n strokeWidth = 1.5,\n },\n): JSX.Element => {\n return (\n <>\n \n \n \n \n );\n};\n\nexport default createSvg(\n WalletAdd,\n 'wallet-add',\n);\n","import styled, { css } from 'styled-components';\n\nimport { wideBreakpoints } from '@r1-frontend/ui-react/components/layouts/wideContainer';\nimport { H1, H2, H3, H4, H5 } from '@r1-frontend/ui-react/components/typography/heading';\nimport { Paragraph1, Paragraph2, Paragraph3, Paragraph4, Paragraph5 } from '@r1-frontend/ui-react/components/typography/paragraph';\n\nconst TextWrapper = styled.div<{ $lastIndent?: boolean }>`\n display: block;\n \n ${H1} {\n margin-bottom: 16px;\n \n @media (min-width: ${wideBreakpoints.mobile}) {\n margin-bottom: 24px;\n }\n }\n \n ${H2} {\n margin-bottom: 8px;\n \n @media (min-width: ${wideBreakpoints.mobile}) {\n margin-bottom: 16px;\n }\n }\n \n ${H3}, ${H4}, ${H5} {\n margin-bottom: 8px;\n }\n \n ${Paragraph1}, ${Paragraph2}, ${Paragraph3}, ${Paragraph4}, ${Paragraph5} {\n margin-bottom: 16px;\n\n ${({ $lastIndent = true }) => $lastIndent\n ? ''\n : css`\n &:last-child {\n margin-bottom: 0px;\n }\n `}\n }\n`;\n\nexport default TextWrapper;\n","module.exports = \"https://cdn-b2c.dom.ru/b2c-domru/2.357.4/frontend/_next/static/images/desktop-banner-beb02021bcfd7ad6dc23d91f944a108d.png\";","module.exports = \"https://cdn-b2c.dom.ru/b2c-domru/2.357.4/frontend/_next/static/images/desktop-banner-414bc146fe220eb2218fae16bad9c40b.webp\";","module.exports = \"https://cdn-b2c.dom.ru/b2c-domru/2.357.4/frontend/_next/static/images/mobile-banner-2d3b115e1d58a8d37b966144668bc5b6.png\";","module.exports = \"https://cdn-b2c.dom.ru/b2c-domru/2.357.4/frontend/_next/static/images/mobile-banner-927a7b92237fc7c1a8f7cbdc4b2f5134.webp\";","module.exports = \"https://cdn-b2c.dom.ru/b2c-domru/2.357.4/frontend/_next/static/images/spec-offer-with-label-mobile-dff52960e0520ee46ae896db4eeb7b48.png\";","module.exports = \"data:image/webp;base64,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\"","module.exports = \"https://cdn-b2c.dom.ru/b2c-domru/2.357.4/frontend/_next/static/images/spec-offer-with-label-0ed4821cb2a1e42831a4d71500d95263.png\";","module.exports = \"https://cdn-b2c.dom.ru/b2c-domru/2.357.4/frontend/_next/static/images/spec-offer-with-label-b5e5fe09d78f987380583e3786a8ddb2.webp\";","module.exports = \"https://cdn-b2c.dom.ru/b2c-domru/2.357.4/frontend/_next/static/images/spec-offer-9450303614b883765c9e303a57564c23.png\";","module.exports = \"https://cdn-b2c.dom.ru/b2c-domru/2.357.4/frontend/_next/static/images/spec-offer-043c1f3a11dbcd14b4344bb522a5ff8d.webp\";","module.exports = \"https://cdn-b2c.dom.ru/b2c-domru/2.357.4/frontend/_next/static/images/stopper-desktop-bg-5f8963b62c70726cc1acf7bdc52ccd9d.png\";","module.exports = \"https://cdn-b2c.dom.ru/b2c-domru/2.357.4/frontend/_next/static/images/stopper-desktop-bg-434f4f049e1b2efe55f95b1927d78699.webp\";","module.exports = \"https://cdn-b2c.dom.ru/b2c-domru/2.357.4/frontend/_next/static/images/stopper-mobile-bg-2610c77ca1d4aa4919948f9823a53dea.png\";","module.exports = \"https://cdn-b2c.dom.ru/b2c-domru/2.357.4/frontend/_next/static/images/stopper-mobile-bg-856997e2b81420806b030469bb495240.webp\";","var v1 = require('./v1');\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]], '-',\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]],\n bth[buf[i++]], bth[buf[i++]]\n ]).join('');\n}\n\nmodule.exports = bytesToUuid;\n","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\n\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = (typeof(crypto) != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto)) ||\n (typeof(msCrypto) != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto));\n\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n\n module.exports = function mathRNG() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\n// **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\nvar _nodeId;\nvar _clockseq;\n\n// Previous uuid creation time\nvar _lastMSecs = 0;\nvar _lastNSecs = 0;\n\n// See https://github.com/uuidjs/uuid for API details\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;\n\n // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n if (node == null || clockseq == null) {\n var seedBytes = rng();\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [\n seedBytes[0] | 0x01,\n seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]\n ];\n }\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n }\n\n // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();\n\n // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;\n\n // Time since last uuid creation (in msecs)\n var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;\n\n // Per 4.2.1.2, Bump clockseq on clock regression\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n }\n\n // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n }\n\n // Per 4.2.1.2 Throw error if too many uuids are requested\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq;\n\n // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n msecs += 12219292800000;\n\n // `time_low`\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff;\n\n // `time_mid`\n var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff;\n\n // `time_high_and_version`\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n b[i++] = tmh >>> 16 & 0xff;\n\n // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n b[i++] = clockseq >>> 8 | 0x80;\n\n // `clock_seq_low`\n b[i++] = clockseq & 0xff;\n\n // `node`\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;\n","var rng = require('./lib/rng');\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n"],"names":["HintWrapper","styled","BorderRadius","type","COLORS","isLoading","wideBreakpoints","HintIcon","HintMessage","FONTS","hintType","hintMessage","paySumIsLoading","useSelector","state","seasonTicketPayment","ST","WithSkeleton","count","borderRadius","style","margin","svg","use","href","List","ListContainer","$size","$direction","Paragraph5","$color","li","span","DetailWrapper","DetailRow","PaymentInfo","Separator","IconWrap","writeOffs","useState","isOpen","setIsOpen","length","map","writeOff","name","withTooltip","WithTooltip","isShown","onClose","content","TooltipText","onClick","role","InfoCircleFlip","size","data-test","Cost","value","bonus","getPluralize","bonusPluralize","isAbnProgramTermsEnabled","getIsAbnLoyaltyProgramEnabled","selectBonusText","payment","paymentTypeId","paymentData","bonusesValue","isUseBonuses","selectedTicket","seasonTicket","bonusesInfo","amount","isSeasonTicketPay","EPaymentTypeIds","availability","loyalty","isRegistered","baseWriteOffs","selectPaymentSum","_isUseBonuses","isUseBonusesSeasonTicket","_bonuses","amountBonuses","Math","round","splice","ticketInfo","sumPrice","unshift","isTablet","useMatchMedia","paymentSum","hintData","clientBonuses","info","bonuses","method","result","isBonusesSuccess","methodType","currentMethod","requiredBonusesToPay","currentBonusesQuantity","min","notMoreThanBonuses","selectBonusHint","isWriteOffDetailShown","useMemo","WriteOffDetail","InfoHint","Wrapper","Label","Text","Info","isValid","InputBonuses","InputSimple","disabled","BonusesPaymentForm","availableBonuses","maxLength","isChecked","isDisabled","onToggle","onChange","onFocus","onBlur","useMatchMediaByWidth","BaseCheckbox","checked","RubleSymbol","pluralize","inputType","isNotValid","required","bonusesRegExp","BonusesPayment","bonusesPaymentProps","dispatch","useDispatch","showBonusesPayment","auth","isAuth","shallowEqual","cardPaymentSum","selectCardPaySum","isBonusesValueValid","isOnlyBonusesPay","bufferBonusesValue","setBufferBonusesValue","isTouchedBonusInput","setIsTouchedBonusInput","useEffect","toString","calculateByUseBonuses","event","target","validateBonusesValue","test","setBonusesValue","fillBonusesValue","useBonusesPayment","BonusesDetail","ConnectAutoPay","isConnectAutoPay","isSaveCard","showAutoPay","isAutoPayConnected","BlockContainer","rounder","$desktop","$mobile","indent","toggleConnectAutoPayStatus","InputWithRubleSymbol","sumRegExp","PaymentSumInput","paymentSumValidity","bufferSumValue","setBufferSumValue","setCardPaymentSum","dispatchValue","setPaymentSum","validatePaymentSum","inpuSumErrorMessage","baseText","EValidityStatus","toCurrency","NBSP","minPaymentSum","maxPaymentSum","getInputSumErrorMessage","FullWidthListContainer","Paragraph4","$smaller","fillPaymentSum","errorMessage","PaymentFieldWrapper","children","maxWidth","StyledContainer","TwoFieldWrapper","CardPaymentForm","EmailInput","BonusesButton","Button","BonusesPayButton","btnText","isDisable","useSendBonusesPayment","providerId","selectProviderId","sendBonusesPayment","resp","respData","doRequest","pay","bonusValue","isSuccess","isOpenPopup","getLoyaltyInfo","setPaymentResult","InputPhone","phoneDecorator","INITIAL_SELECTED_VALUE","label","isContactId","EMPTY_CONTACT","contactId","undefined","PhoneInput","rest","currentNumber","phone","selected","setSelected","isStartedToChange","setIsStartedToChange","setPhone","updateValidation","useCallback","onChangePhone","phoneData","formatValueForPhoneWithSpaces","placeholder","className","SberPayButton","InnerWrap","width","height","fill","ListItem","theme","border","background","radius","padding","mobilePadding","storyColor","color","colorArrow","colorArrowIsOpen","buttonType","backgroundIcon","borderIcon","backgroundIconIsOpen","borderIconIsOpen","SberPayInstruction","isMobile","useModal","toggleModal","AccordionWrapper","AccordionHeader","onOpen","toggleAccordion","colors","showButton","AccordionTitle","itemProp","IndentContainer","$united","H4","$withIndent","AccordionBody","withDividingBorder","TextWrapper","$lastIndent","formatPhone","p","substring","SberPayErrorPopup","DefaultPopup","H3","marginRight","br","ButtonGroup","bType","InlineBtn","SberPaySuccessPopup","sberpayMethod","id","imagePath","imageAlt","SberPay","showSberPay","openModal","closeModal","widget","PaymentMethod","addNewPayMethods","useSberPayTab","useSberPayMethod","city","provider","agreement","agreementEnc","paymentSource","sendSberPay","params","mobile_phone","payment_value","payment_source","agreement_enc","number_value","back2app","makePaymentAuth","makePaymentUnauth","payload","regStatus","onSendSberPay","closeSuccessModal","closeErrorModal","openSuccessModal","openErrorModal","PolicyNote","buttonText","agreeUrl","POLICY_PAGE_LINK","isOpenSuccess","isOpenError","sbpMethod","useSbpPayment","currentCity","has_QPS","PLButton","BaseButton","onPayHandler","btnSizes","btnTypes","text","Instruction","InstructionItem","BankList","BankItem","SbpLink","banksData","bank","img","src","alt","pushDataLayer","rel","QrBlock","QrSide","QrInner","ErrorMessage","SupportLink","QrButton","InfoSide","InfoTitle","PayButton","css","userAgreement","isLoadingQrData","setIsLoadingQrData","sbpData","qrCode","isQrCodeError","setIsQrCodeError","fetchQrCode","linkResponse","_code","getQrLink","paySum","Error","error","message","getQrCode","data","setPaymentQrCode","captureException","dangerouslySetInnerHTML","__html","openChat","SbpInstruction","qrLink","defaultPopupState","popupState","setPopupState","fetchQrLink","_link","setPaymentQrLink","onFetchQrLinkHandler","qrLinkResult","title","actions","ResultPopup","clientPersonal","onSendPay","getClientAll","useSendPayBonuses","onSendPayHandler","onPayWithoutBonuses","reqAction","togglePayWithBonusesStatus","isShowLoyaltyButton","hasAgreement","authAgreement","isBonusOk","commonProps","LoyaltyButton","MobileSbp","DesktopSbp","PaymentBlock","useRouter","query","s","deliveryRequestId","isOnlinePay","queryPay","queryPaySum","queryAgreement","frameUrl","initPaymentState","newCardArgs","_agreement","newCardPayment","PaymentFrame","PaymentMethodCards","SbpPaymentDetail","CardPayment","defaultAgreementData","contact","rowEnc","InputName","nameDecorator","InfoSection","InfoContainer","SPhoneInput","StyledInput","isNotFound","NotFoundText","InfoLineTitle","SSelect","Select","setIsCloseFrame","isCloseFrame","isDesktop","usePrepareQueryData","c","agreementData","setAgreementData","agreementList","setAgreementList","activeFilter","setActiveFilter","contactValue","setContactValue","notFound","setNotFound","setIsLoading","isPhone","agreementText","phoneText","notFoundText","menuItems","action","dataLayerPush","EVENTS","category","CATEGORIES","toggleLabels","leftText","rightText","filter","item","activeMenuItem","setActiveMenuItem","currentItem","queryContact","querySum","getAgreementList","onChangeHandler","setAgreement","contactList","firstContact","getContracts","contacts","contactType","row","address","onMenuItemClick","valueItem","Toggle","textsValues","onChangeCallback","activeTab","initialValue","Throbber","position","waitStatus","options","PageTitle","PageContent","InfoBlock","ActionsBlock","props","router","isPayCardSuccess","payStatus","onCloseHandler","initialPaymentResult","push","EResultPopupStatus","payAgreement","ErrorDisconnectText","PaymentType","PaymentBanner","createSvg","strokeWidth","g","path","d","strokeLinecap","strokeLinejoin","MobileAppPopupAnalytics","show","this","send","downloadApp","BaseAnalytics","mobileAppPopupAnalytics","customStyles","popup","default","overflowY","$wrap","a","Icon","ImportSquare","NonStaticContainer","$zIndex","WebpImage","urlWebp","MobileBannerWebp","DesktopBannerWebp","MobileBanner","DesktopBanner","TypeContent","ActionSectionContent","TypeWrapper","types","icon","WalletAdd","TicketDiscount","wholesaleCheaperData","onClickHandler","updatePaymentTypeId","paymentType","isSomeEnum","isPaymentTypeId","renderTypes","SkeletonTheme","wrapper","ToggleCard","isActive","onToggleType","slideIndex","findIndex","WithSkeletonContext","ActionSectionWrapper","SlideCarousel","withoutArrows","withoutDots","slideWidth","cellSpacing","isPaymentInProcess","isInProcess","currentPaySum","paySumIsError","availableFlags","validity","hasPaySumm","loading","connectSeasonTicket","HowItWorksContent","TicketsInfo","BoldText","UpShiftedContent","ChatLink","PopupContent","success","updateClientInfo","Router","paid","OpenChat","setTicketPopup","initialTicketPopupState","declined","paySeasonTicket","qrError","none","STEPS_WITH_REDIRECT","ticketPopup","step","Component","PopupResult","includes","tickets","ticket","countMonth","delta","monthPluralize","useSbpHint","getSbpHintByBonusesPaymentResult","bonusesPaymentResult","nextAction","getSbpHint","connectionResult","loyaltyBonuses","loyaltyHintData","paymentMethod","ticketPayment","maxBonusesAmount","floor","ceil","useLoyaltyHint","setIsUseBonuses","onlyNumbers","Number","replace","updateBonusesAmount","QrError","sbpInfo","isFetching","LoadingPaySumSkeleton","enableAnimation","inline","Skeleton","useCardPayment","sbpHintData","ActionSectionTitle","LoyaltySection","Alert","updateSeasonTicket","SbpPayment","ConnectButton","onSelect","deltaPeriod","totalDiscount","cardData","price","Content","ListWrapper","useSlider","isLaptop","isSlider","slideHeight","currentFlag","activateDate","sumText","closeDate","endDate","ddmmmmyyyy","parseRusDate","needPayNewTicket","writeOffPeriodText","needPayText","noNeedPayText","startDate","dayjs","format","useTicketHint","onSelectTicket","ticketById","find","flag","selectedTicketId","renderTickets","SeasonTicket","initialSlideHeight","TitleWrapper","IconWrapper","setIsOpenPopup","initialTicket","HowItWorks","TicketsList","TicketDetails","TicketConnectionPopup","onConnect","stopperData","selectNewOrViewedOffers","isShowSpecOffer","stopper","hasOtherOffers","isImageWithLabel","getABNVariant","image","SpecOfferWithLabelImage","webpImage","SpecOfferWithLabelImageWebp","SpecOfferWithLabelMobileImage","SpecOfferWithLabelMobileImageWebp","SpecOfferImage","SpecOfferImageWebp","hasInstantConnect","shortDescription","toggleIsShowSpecOffer","ControlElement","$customFont","specialOfferAnalytics","viewOffer","Link","passHref","$position","$top","$right","progressiveBackground","StopperDesktopBackground","webpSrc","StopperDesktopBackgroundWebp","StopperMobileBackground","StopperMobileBackgroundWebp","SpecialOffer","specOffers","popupOffer","selectOffer","stoppers","isPopupOpened","referrer","callbackMap","useCallbackMap","useConnectOffer","activateButtonText","connectOffer","isNewOfferDetails","isShowNewDetail","isNewDetailsDesign","handleRedirect","onClosePopup","batch","setIsPopupOpened","promoPopupProps","isPopupOpen","offer","SpeedBonusConnection","SpecialOfferPopup","setSelectedOfferId","requestId","navigation","billingState","benefits","some","needPhone","SpecOfferDetails","LkPromotionalPopup","PromoConnectedPopup","PromoErrorPopup","PromoNeedPaymentPopup","PromoNeedSetPhonePopup","onActivate","DefaultCallback","PromoConnectionPopup","memo","defaultPopupData","isShowMobileAppPopup","setIsShowMobileAppPopup","isShowSeasonTicket","SHOW_SEASON_TICKET","popupData","isAutoPaySuccess","bonusesWithText","setPaymentResultByStatus","isNeedSupport","baseInfo","setCardPaymentResult","isBonusesPaymentSuccessfull","setBonusesPaymentResult","setAutoPayConnectResult","usePaymentResult","fetchSeasonTickets","getLoyaltyAvailability","loadOffers","getClientPayment","preparePopupText","currentPopupData","currentText","onSuccessPayment","showSpecOffer","setPaymentMethod","hasAvailableSeasonTicket","AgreementInfo","PaymentCheck","CardsList","SeasonTicketPayment","MobileAppPopup","mainPageUrl","SegmentedBannerGrid","alias","PaymentUnauthLayout","BannerSection","Image","LazyLoadImage","Title","Subtitle","ButtonBlock","isShowIOSButton","setIsShowIOSButton","isShowAndroidButton","setIsShowAndroidButton","devicePlatform","setDevicePlatform","pngImage","window","navigator","platform","indexOf","onDataLayerPush","PopupWrapper","PopupSuccessIcon","TickCircle","PopupErrorIcon","PopupTitle","PopupText","PopupButtonsWrapper","LkPromotionalPopupExtra","positive","buttons","Close","clickHandler","isConnecting","isLocalLoading","setIsLocalLoading","actionText","onConnectHandler","callback","finally","capitalize","transaction","createGuid","paymentUrl","stringify","createTransaction","setOfferTransaction","join","uri","withAuth","withProvider","body","JSON","PopupSetPhoneWrapper","isSelectInputable","useMargin","PopupSetPhoneError","PopupSetPhoneButton","clientContacts","status","phoneOptions","setPhoneOptions","inputValue","setInputValue","slice","selectedPhone","setSelectedPhone","isNumberUsed","setIsNumberUsed","setUseMargin","subscriptions","onInputChange","option","phoneValue","newOption","onSetPhone","phoneParam","response","cookie","onPhoneChange","CreatablePhoneSelect","createLabel","inputPlaceHolder","onMenuOpen","onMenuClose","masked","TARIFF_BETWEEN_BANNERS","testName","variants","ENABLED","DISABLED","YA_SEARCH","enabled","FAQ_REDESIGN","FAQ_NEW","SHOW","HIDE","ONLINE_BUY","_query","key","_value","isMasked","digitsOnly","replaceValueForPhone","seasonTicketFlags","setLoadingStatus","EWholesaleCheaperTypes","setWholesaleCheaperData","transformSeasonTickets","_seasonTicketFlags","el","getState","seasonTickets","selectDomain","get","selectHostname","domain","queryParams","e","token","Object","values","initialOpen","StylesTab","Container","fontSize","TabLeft","TabRight","LayoutLeft","colorTab","translateValue","LayoutRight","isDifferentColorText","args","translateData","isRightTabActive","H1","H2","H5","Paragraph1","Paragraph2","Paragraph3","module","exports","v1","v4","uuid","byteToHex","i","substr","buf","offset","bth","getRandomValues","crypto","bind","msCrypto","rnds8","Uint8Array","rnds","Array","r","random","_nodeId","_clockseq","rng","bytesToUuid","_lastMSecs","_lastNSecs","b","node","clockseq","seedBytes","msecs","Date","getTime","nsecs","dt","tl","tmh","n","ii"],"sourceRoot":""}