{"version":3,"file":"static/chunks/9683-381f8646d549184f.js","mappings":"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","sources":["webpack://_N_E/./src/features/domru-bonus/constants/abnVariants.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/helpers/index.ts","webpack://_N_E/../../packages/api-domru/src/api-season-ticket/v1/season-ticket-activate/index.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/store/actions/payByBindedCard.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/store/actions/payByNewCard.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/store/actions/payBySbp.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/store/actions/paySeasonTicket.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/store/actions/connectSeasonTicket.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/store/actions/getInfoByPaymentStatus.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/store/actions/validateBonusesAmount.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/store/actions/updateBonusesAmount.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/store/actions/updateClientInfo.ts","webpack://_N_E/../../packages/api-domru/src/api-season-ticket/v1/season-ticket/pay-sum/index.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/store/actions/updateSeasonTicket.ts","webpack://_N_E/./src/features/payments-abn/components/SeasonTicketPayment/store/selectors/selectPaymentSum.ts","webpack://_N_E/./src/features/payments-abn/helpers/pushDataLayer.ts","webpack://_N_E/./src/features/payments-abn/store/actions/addNewPayMethods.ts","webpack://_N_E/./src/features/payments-abn/store/actions/bindedCardAutoPayConnect.ts","webpack://_N_E/./src/features/payments-abn/store/actions/bindedCardPayment.ts","webpack://_N_E/./src/features/payments-abn/store/actions/validateBonusesValue.ts","webpack://_N_E/./src/features/payments-abn/store/actions/validatePaymentSum.ts","webpack://_N_E/./src/features/payments-abn/store/actions/calculateByUseBonuses.ts","webpack://_N_E/../../packages/api-domru/src/api-pay/v1/payment/status.ts","webpack://_N_E/./src/features/payments-abn/store/actions/checkPaymentStatus.ts","webpack://_N_E/./src/features/payments-abn/store/actions/createTransaction.ts","webpack://_N_E/./src/features/payments-abn/store/actions/initPaymentState.ts","webpack://_N_E/./src/features/payments-abn/store/actions/newCardAutoPayConnect.ts","webpack://_N_E/./src/features/payments-abn/store/actions/newCardPayment.ts","webpack://_N_E/./src/features/payments-abn/store/actions/removeTransaction.ts","webpack://_N_E/./src/features/payments-abn/store/actions/setBonusesValue.ts","webpack://_N_E/./src/features/payments-abn/store/actions/setPaymentSum.ts","webpack://_N_E/./src/features/payments-abn/store/actions/showSpecOffer.ts","webpack://_N_E/./src/features/payments-abn/store/actions/updatePaymentTypeId.ts","webpack://_N_E/./src/features/payments-abn/store/actions/updateTransaction.ts","webpack://_N_E/./src/features/specialOffersContainer/analytics.ts","webpack://_N_E/./src/features/specialOffersContainer/constants.ts","webpack://_N_E/./src/features/specialOffersContainer/helpers/getDefaultCallback.ts","webpack://_N_E/./src/features/specialOffersContainer/helpers/getGaLabelByNavigationType.ts","webpack://_N_E/./src/features/specialOffersContainer/helpers/isCallbackDefined.ts","webpack://_N_E/./src/features/specialOffersContainer/helpers/isNewDetailsDesign.ts","webpack://_N_E/./src/features/specialOffersContainer/store/actions/thunk/loadOffer.ts","webpack://_N_E/../../packages/api-domru/src/spec-offer/v1/spec-offers/spec-offers.ts","webpack://_N_E/./src/features/specialOffersContainer/store/actions/thunk/loadOffers.ts","webpack://_N_E/./src/features/specialOffersContainer/store/actions/thunk/setOffer.ts","webpack://_N_E/../../packages/api-domru/src/spec-offer/v1/spec-offers/activate/index.ts","webpack://_N_E/./src/features/specialOffersContainer/store/actions/thunk/updateOffer.ts","webpack://_N_E/../../packages/api-domru/src/spec-offer/v1/spec-offers/deactivate/index.ts","webpack://_N_E/../../packages/api-domru/src/spec-offer/v1/spec-offers/view/index.ts","webpack://_N_E/./src/features/specialOffersContainer/store/actions/thunk/viewOffer.ts","webpack://_N_E/./src/features/specialOffersContainer/store/selectors/selectIsOfferTransactionPayed.ts","webpack://_N_E/./src/features/specialOffersContainer/store/selectors/selectNewOrViewedOffers.ts","webpack://_N_E/./src/features/specialOffersContainer/store/selectors/selectOffer.ts","webpack://_N_E/./src/helpers/date.js","webpack://_N_E/./src/helpers/numbers.js","webpack://_N_E/./src/store/actions/auth/getClientPayment.ts","webpack://_N_E/../../packages/api-domru/src/api-loyalty/v1/program/pay.ts","webpack://_N_E/../../packages/api-domru/src/api-pay/v1/autopayment/activate.ts","webpack://_N_E/../../packages/api-domru/src/api-pay/v1/card/add.ts","webpack://_N_E/../../packages/api-domru/src/api-pay/v1/payment/add.ts","webpack://_N_E/../../packages/api-domru/src/api-pay/v1/payment/card.ts","webpack://_N_E/../../packages/api-domru/src/api-pay/v1/qr/index.ts","webpack://_N_E/../../packages/api-domru/src/api-pay/v1/vtb-pay/qr-core/index.ts","webpack://_N_E/../../packages/api-domru/src/spec-offer/v1/spec-offers/dto/ISpecOffer.ts","webpack://_N_E/../../packages/ui-react/src/components/controls/baseRadio/styled.ts","webpack://_N_E/../../packages/ui-react/src/components/controls/baseRadio/index.tsx"],"sourcesContent":["import { getABNVariant } from '~/src/helpers/abn-tests';\n\nexport const LOYALTY_PROGRAM_TERMS = {\n testName: 'loyalty_program_terms',\n variants: {\n on: 'lpt_on',\n off: 'lpt_off',\n },\n};\n\nexport const getIsAbnLoyaltyProgramEnabled = () => {\n return getABNVariant(LOYALTY_PROGRAM_TERMS.testName) === LOYALTY_PROGRAM_TERMS.variants.on;\n};\n","import { dataLayerPush } from '@r1-frontend/analytics/dataLayerPush';\n\nimport { CATEGORIES, EVENTS } from '@r1-frontend/shared/constants/analytics';\nimport { pluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { monthPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\n\ninterface ILabelProps {\n countMonth: number,\n sumPrice: number,\n deltaPeriod: number,\n}\n\nexport const getTicketDataLayerLabel = ({ countMonth, sumPrice, deltaPeriod }: ILabelProps) => {\n return `duration:${countMonth}_${pluralize(countMonth, monthPluralize)}|cost:${sumPrice}|savings:${deltaPeriod}|`;\n};\n\nexport const pushDataLayer = (action: string, label?: string) => {\n dataLayerPush({\n event: EVENTS.UAevent,\n category: CATEGORIES.seasonTickets,\n action,\n label,\n });\n};\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\nexport interface IResponse {\n header: string,\n message: string,\n}\n\ninterface IData {\n id: number,\n paySum: number,\n}\n\n/**\n * Подключение или продление абонемента\n * https://master.api-season-ticket.sandbox.d2c.r-one.io/docs/#/season-ticket/SeasonTicketController_activate\n * @returns IResponse\n */\nexport const seasonTicketActivate = (providerId: number, data: IData): IRequest => ({\n uri: `/api/v1/${providerId}/season-ticket/activate`,\n method: 'POST',\n withAuth: true,\n body: JSON.stringify(data),\n withProvider: true,\n});\n","import { doRequest } from '@r1-frontend/do-request/index';\nimport { makePaymentWithBinding } from '@r1-frontend/api-domru/api-pay/v1/payment/card';\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 { monthPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\n\nimport { getTicketDataLayerLabel, pushDataLayer } from '~/src/features/payments-abn/components/SeasonTicketPayment/helpers';\nimport { setInProcess, setTicketPopup } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport { ddmm } from '~/src/helpers/date';\nimport { toCurrency } from '~/src/helpers/numbers';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nconst payByBindedCard = (amount: number) => {\n return async(dispatch: TAppThunkDispatch, getState: TGetState): Promise => {\n dispatch(setInProcess(true));\n\n const {\n city: { provider: { providerId } },\n payment: { method },\n seasonTicketPayment: { seasonTicket },\n } = getState();\n\n const cardId = method?.id;\n\n const { activateDate = '', countMonth = 3, deltaPeriod = 0, sumPrice = 0, paySum = 0 } = seasonTicket || {};\n\n const params = {\n email: '',\n autopay_act: 0,\n payment_value: amount,\n binding_id: cardId,\n payment_source: 1,\n return_url: location.origin + '/payments-response?',\n };\n if (cardId) {\n const resp = await doRequest.apiPay(\n makePaymentWithBinding(providerId, params),\n );\n const { isSuccess } = resp;\n\n pushDataLayer(\n isSuccess ? 'subscription_and_payment_success' : 'subscription_connect_success',\n getTicketDataLayerLabel({ countMonth, sumPrice, deltaPeriod }),\n );\n\n const title = isSuccess\n ? `Вы пополнили баланс на ${toCurrency(paySum)} ${RubleSymbol} и подключили абонемент на ${countMonth} ${pluralize(countMonth, monthPluralize)}`\n : 'Вы подключили абонемент, но пополнить баланс не получилось';\n const text = isSuccess ? `Абонемент начнёт действовать ${ddmm(activateDate)}` : '';\n\n dispatch(setTicketPopup({\n isOpen: true,\n step: isSuccess ? 'paid' : 'declined',\n title,\n text,\n type: isSuccess ? EResultPopupStatus.SUCCESS : EResultPopupStatus.WARNING,\n }));\n }\n\n\n dispatch(setInProcess(false));\n };\n};\n\nexport default payByBindedCard;\n","import { captureException } from '@sentry/node';\n\nimport { doRequest } from '@r1-frontend/do-request/index';\nimport { addCard } from '@r1-frontend/api-domru/api-pay/v1/card/add';\nimport { IRegPayCard } from '@r1-frontend/api-domru/api-pay/v1/card/dto/IRegPayCard';\nimport { makePaymentAuth, makePaymentUnauth } from '@r1-frontend/api-domru/api-pay/v1/payment/add';\n\nimport { setInProcess } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport { IPaymentResult, setPaymentResult } from '~/src/features/payments-abn/store/actionCreators';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nconst payByNewCard = (amount: number) => {\n return async(dispatch: TAppThunkDispatch, getState: TGetState): Promise => {\n dispatch(setInProcess(true));\n\n const {\n auth: { isAuth },\n city: { provider: { providerId } },\n payment: { isSaveCard, result },\n } = getState();\n\n const requestParams = {\n save_card_flag: +isSaveCard,\n autopay_act: 0,\n email: '',\n payment_value: amount,\n payment_source: 1,\n return_url: location.origin + '/payments-response?',\n };\n const return_url = location.origin + '/payments-response?';\n const resp = await doRequest.apiPay(\n amount\n ? isAuth\n ? makePaymentAuth(providerId, requestParams)\n : makePaymentUnauth(providerId, requestParams)\n : addCard(providerId, { autopay_act: 0, return_url, payment_source: 1 }),\n );\n\n if (resp.isSuccess) {\n const respData: IPaymentResult = {\n ...result,\n frameUrl: resp.payload.payUrl,\n };\n dispatch(setPaymentResult(respData));\n } else {\n captureException(resp);\n }\n\n dispatch(setInProcess(false));\n };\n};\n\nexport default payByNewCard;\n","import { batch } from 'react-redux';\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 {\n setIsFetching,\n setQrCode,\n setQrFetchingResult,\n setQrLink,\n} from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nconst payBySbp = (amount: number) => {\n return async(dispatch: TAppThunkDispatch, getState: TGetState): Promise => {\n dispatch(setIsFetching(true));\n\n const {\n auth: { clientPersonal },\n city: { provider: { providerId } },\n seasonTicketPayment: { sbpInfo: { result } },\n } = getState();\n const { agreement } = clientPersonal || {};\n const userAgreement = agreement?.toString() || '';\n\n if (result === 'error') {\n dispatch(setQrFetchingResult('none'));\n }\n\n const linkResponse = await doRequest.apiPay(\n getQrLink({ providerId, userAgreement, paySum: amount }),\n );\n if (linkResponse.isSuccess) {\n dispatch(setQrLink(linkResponse.payload.data.payload));\n } else {\n batch(() => {\n dispatch(setQrFetchingResult('error'));\n dispatch(setIsFetching(false));\n });\n\n return;\n }\n\n const codeResponse = await doRequest.apiPay(\n getQrCode(providerId, linkResponse.payload.data.payload),\n );\n\n if (codeResponse.isSuccess) {\n dispatch(setQrCode(codeResponse.payload));\n } else {\n batch(() => {\n dispatch(setQrFetchingResult('error'));\n dispatch(setIsFetching(false));\n });\n\n return;\n }\n\n dispatch(setIsFetching(false));\n };\n};\n\nexport default payBySbp;\n","import { selectPaymentSum } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/selectors/selectPaymentSum';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nimport payByBindedCard from './payByBindedCard';\nimport payByNewCard from './payByNewCard';\nimport payBySbp from './payBySbp';\n\nconst paySeasonTicket = () => {\n return async(dispatch: TAppThunkDispatch, getState: TGetState): Promise => {\n const state = getState();\n\n const {\n payment: { method, isSaveCard },\n } = state;\n\n const currentPaySum = selectPaymentSum(state);\n const methodType = method?.methodType;\n\n if (currentPaySum || (methodType === 'new-card' && isSaveCard)) {\n switch (methodType) {\n case 'card':\n dispatch(payByBindedCard(currentPaySum));\n break;\n case 'new-card':\n dispatch(payByNewCard(currentPaySum));\n break;\n case 'sbp':\n dispatch(payBySbp(currentPaySum));\n break;\n }\n }\n };\n};\n\nexport default paySeasonTicket;\n","/* eslint-disable complexity */\nimport { batch } from 'react-redux';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport { IPayResponse, pay } from '@r1-frontend/api-domru/api-loyalty/v1/program/pay';\nimport { IResponse, seasonTicketActivate } from '@r1-frontend/api-domru/api-season-ticket/v1/season-ticket-activate';\n\nimport { EResultPopupStatus } from '@r1-frontend/ui-react/components/popups/popupResult';\nimport { RubleSymbol } from '@r1-frontend/ui-react/experimental/purchase/cost/Cost/RubleSymbol';\nimport { getPluralize } from '@r1-frontend/shared/helpers/pluralize';\nimport { monthPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\n\nimport { getTicketDataLayerLabel, pushDataLayer } from '~/src/features/payments-abn/components/SeasonTicketPayment/helpers';\nimport {\n EValidityStatus,\n setBonusesResult,\n setConnectionResult,\n setInProcess,\n setTicketPopup,\n} from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport { ddmm } from '~/src/helpers/date';\nimport { toCurrency } from '~/src/helpers/numbers';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\nimport { getClientPayment } from '~/src/store/actions/auth/getClientPayment';\n\nimport paySeasonTicket from './paySeasonTicket';\n\nconst month = getPluralize(monthPluralize);\n\nconst connectSeasonTicket = () => {\n return async(dispatch: TAppThunkDispatch, getState: TGetState): Promise => {\n const state = getState();\n\n const {\n city: { provider: { providerId } },\n payment: { isSaveCard },\n seasonTicketPayment: { bonusesInfo, seasonTicket, result: connectionResult },\n wholesaleCheaperData: { wholesaleCheaperData },\n } = state;\n\n const { currentFlag = [] } = wholesaleCheaperData || {};\n\n if (currentFlag.length) {\n pushDataLayer('subscription_extend');\n }\n\n const {\n id: flagId = 0,\n activateDate = '',\n countMonth = 3,\n deltaPeriod = 0,\n paySum = 0,\n sumPrice = 0,\n } = seasonTicket || {};\n\n // если ранее не было успешных попыток подключения абонемента\n if (connectionResult !== 'success') {\n dispatch(setInProcess(true));\n\n const data = {\n id: flagId,\n paySum,\n };\n\n const connectionResponse = await doRequest.apiSeasonTicket(seasonTicketActivate(providerId, data));\n\n if (connectionResponse.isSuccess) {\n dispatch(setConnectionResult('success'));\n // показываем попап только в том случае, если суммы на балансе достаточно для активации абонемента\n if (!paySum) {\n pushDataLayer('subscription_and_payment_success', getTicketDataLayerLabel({ countMonth, sumPrice, deltaPeriod }));\n\n batch(() => {\n dispatch(setInProcess(false));\n dispatch(setTicketPopup({\n isOpen: true,\n step: 'success',\n title: `Вы подключили абонемент на ${countMonth} ${month(countMonth)}`,\n text: `Абонемент начнёт действовать ${ddmm(activateDate)}`,\n type: EResultPopupStatus.SUCCESS,\n }));\n });\n\n return;\n }\n } else {\n // при ошибке подключения не выполняем списание бонусов / оплату\n batch(() => {\n dispatch(setConnectionResult('error'));\n dispatch(setInProcess(false));\n dispatch(setTicketPopup({\n isOpen: true,\n step: 'error',\n title: 'Что-то пошло не так',\n type: EResultPopupStatus.ERROR,\n }));\n });\n pushDataLayer('subscription_error', getTicketDataLayerLabel({ countMonth, sumPrice, deltaPeriod }));\n\n return;\n }\n }\n\n const { isUseBonuses, amount: bonusAmount, validity, result } = bonusesInfo;\n\n if (isUseBonuses && validity === EValidityStatus.IS_VALID && result !== 'success') {\n dispatch(setInProcess(true));\n\n const { isSuccess } = await doRequest.apiLoyalty(\n pay(providerId, { bonusValue: bonusAmount }),\n );\n\n if (isSuccess) {\n // @ts-ignore\n dispatch(getClientPayment());\n }\n\n dispatch(setBonusesResult(isSuccess ? 'success' : 'error'));\n // оплачивает абонемент только бонусами\n if (bonusAmount === Math.ceil(paySum) && !isSaveCard) {\n pushDataLayer(\n isSuccess ? 'subscription_and_payment_success' : 'subscription_connect_success',\n getTicketDataLayerLabel({ countMonth, sumPrice, deltaPeriod }),\n );\n\n const title = isSuccess\n ? `Вы пополнили баланс на ${toCurrency(bonusAmount)} ${RubleSymbol} и подключили абонемент на ${countMonth} ${month(countMonth)}`\n : 'Вы подключили абонемент, но пополнить баланс не получилось';\n const text = isSuccess ? `Абонемент начнёт действовать ${ddmm(activateDate)}` : '';\n\n batch(() => {\n dispatch(setInProcess(false));\n dispatch(setTicketPopup({\n isOpen: true,\n step: isSuccess ? 'paid' : 'declined',\n title,\n text,\n type: isSuccess ? EResultPopupStatus.SUCCESS : EResultPopupStatus.WARNING,\n }));\n });\n\n return;\n } else {\n batch(() => {\n dispatch(setInProcess(false));\n dispatch(paySeasonTicket());\n });\n\n return;\n }\n }\n\n dispatch(paySeasonTicket());\n };\n};\n\nexport default connectSeasonTicket;\n","import { 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, monthPluralize } from '@r1-frontend/shared/helpers/pluralize/predifined';\n\nimport { getTicketDataLayerLabel, pushDataLayer } from '~/src/features/payments-abn/components/SeasonTicketPayment/helpers';\nimport { setTicketPopup } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport { setPaymentResult } from '~/src/features/payments-abn/store/actionCreators';\nimport { ddmm } from '~/src/helpers/date';\nimport { toCurrency } from '~/src/helpers/numbers';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nimport { selectSeasonTicketPaySum } from '../selectors/selectPaymentSum';\n\ninterface IStatusProps {\n isSuccess: boolean,\n}\n\ninterface ISuccesStatusProps extends IStatusProps {\n isSuccess: true,\n payStatus: number,\n}\n\ninterface IErrorStatusProps extends IStatusProps {\n isSuccess: false,\n payStatus?: never,\n}\n\nexport type TPaymentStatus = ISuccesStatusProps | IErrorStatusProps\n\nexport const processingPaymentText = 'Если через ХХ часов не удастся зачислить деньги на ваш лицевой счёт, вернём их вам на карту. ' +\n 'Абонемент заработает, когда на счету будет достаточно денег.';\n\nconst getInfoByPaymentStatus = ({ isSuccess, payStatus }: TPaymentStatus) => {\n return (dispatch: TAppThunkDispatch, getState: TGetState): void => {\n const state = getState();\n const {\n payment: { result },\n seasonTicketPayment: { seasonTicket, bonusesInfo: { isUseBonuses, amount: bonusesAmount } },\n } = state;\n const { activateDate = '', paySum = 0, countMonth = 3, sumPrice = 0, deltaPeriod = 0 } = seasonTicket || {};\n\n const seasonTicketPaySum = selectSeasonTicketPaySum(state);\n const cardPaymentSum = toCurrency(seasonTicketPaySum);\n\n\n dispatch(setPaymentResult({ ...result, frameUrl: '' }));\n\n if (!isSuccess) {\n pushDataLayer('subscription_connect_success', getTicketDataLayerLabel({ countMonth, sumPrice, deltaPeriod }));\n dispatch(setTicketPopup({\n isOpen: true,\n step: 'declined',\n title: 'Что-то пошло не так',\n type: EResultPopupStatus.ERROR,\n }));\n\n return;\n }\n\n switch (payStatus) {\n case 1: {\n pushDataLayer('subscription_and_payment_success', getTicketDataLayerLabel({ countMonth, sumPrice, deltaPeriod }));\n dispatch(setTicketPopup({\n isOpen: true,\n step: 'paid',\n title: `Вы пополнили баланс на ${toCurrency(paySum)} ${RubleSymbol} и подключили абонемент на ${countMonth} ${pluralize(countMonth, monthPluralize)}`,\n text: `Абонемент начнёт действовать ${ddmm(activateDate)}`,\n type: EResultPopupStatus.SUCCESS,\n }));\n\n break;\n }\n case 0: {\n pushDataLayer('subscription_connect_success', getTicketDataLayerLabel({ countMonth, sumPrice, deltaPeriod }));\n dispatch(setTicketPopup({\n isOpen: true,\n step: 'declined',\n title: 'Вы подключили абонемент, но пополнить баланс не получилось',\n type: EResultPopupStatus.WARNING,\n }));\n\n break;\n }\n default: {\n pushDataLayer('subscription_and_payment_success', getTicketDataLayerLabel({ countMonth, sumPrice, deltaPeriod }));\n const additionalText = isUseBonuses\n ? `Баланс будет пополнен на ${cardPaymentSum} ${RubleSymbol}. С бонусного счета списали ${bonusesAmount} ${pluralize(bonusesAmount, bonusPluralize)}. `\n : '';\n\n dispatch(setTicketPopup({\n isOpen: true,\n step: 'paid',\n title: 'Обрабатываем ваш платёж',\n text: `${additionalText}${processingPaymentText}`,\n type: EResultPopupStatus.WARNING,\n }));\n\n break;\n }\n }\n };\n};\n\nexport default getInfoByPaymentStatus;\n","import { EValidityStatus, setBonusesAmountValidity } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nconst validateBonusesAmount = () => {\n return (dispatch: TAppThunkDispatch, getState: TGetState): void => {\n const state = getState();\n const {\n seasonTicketPayment: {\n bonusesInfo: {\n amount: bonusesAmount,\n },\n seasonTicket,\n },\n loyalty: {\n info: {\n bonuses,\n },\n },\n } = state;\n\n const { paySum = 0 } = seasonTicket || {};\n\n const currPaySum = Math.floor(paySum * 100) / 100;\n\n const getValidity = (): EValidityStatus => {\n switch (true) {\n case !bonusesAmount:\n return EValidityStatus.IS_LOWER_BOUND_ERROR;\n case bonusesAmount > currPaySum || bonusesAmount > bonuses:\n return EValidityStatus.IS_UPPER_BOUND_ERROR;\n case (bonusesAmount <= currPaySum && bonusesAmount > 1):\n default:\n return EValidityStatus.IS_VALID;\n }\n };\n\n const isValid = getValidity();\n\n dispatch(setBonusesAmountValidity(isValid));\n };\n};\n\nexport default validateBonusesAmount;\n","import { batch } from 'react-redux';\n\nimport { setBonusesAmount, setQrCode, setQrLink } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nimport validateBonusesAmount from './validateBonusesAmount';\n\nconst updateBonusesAmount = (amount: number) => {\n return (dispatch: TAppThunkDispatch, getState: TGetState): void => {\n const { seasonTicketPayment: { sbpInfo: { qrLink, qrCode } } } = getState();\n\n if (qrLink) {\n dispatch(setQrLink(''));\n }\n if (qrCode) {\n dispatch(setQrCode(''));\n }\n\n batch(() => {\n dispatch(setBonusesAmount(amount));\n dispatch(validateBonusesAmount());\n });\n };\n};\n\nexport default updateBonusesAmount;\n","import { resetState } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport { EPaymentTypeIds } from '~/src/features/payments-abn/store/actionCreators';\nimport { updatePaymentTypeId } from '~/src/features/payments-abn/store/actions';\nimport { TAppThunkDispatch } from '~/src/store';\n\nconst updateClientInfo = () => {\n return (dispatch: TAppThunkDispatch): void => {\n dispatch(updatePaymentTypeId(EPaymentTypeIds.DEFAULT));\n dispatch(resetState());\n };\n};\n\nexport default updateClientInfo;\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\nexport type { ISeasonTicketPaySum } from './dto/ResponseDto';\n\n/**\n * Получить сумму к оплате при подключении абонемента\n * https://master.api-season-ticket.sandbox.d2c.r-one.io/docs/#/season-ticket/SeasonTicketController_getPaySum\n * @returns ISeasonTicketPaySum\n */\nexport const seasonTicketPaySum = (providerId: number, flagId: number): IRequest => ({\n uri: `/api/v1/${providerId}/season-ticket/${flagId}/pay-sum`,\n method: 'GET',\n withAuth: true,\n withProvider: true,\n});\n","import { batch } from 'react-redux';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport { IAvailableSeasonTicket } from '@r1-frontend/api-domru/api-season-ticket/v1/season-ticket/dto/ResponseDto';\nimport { ISeasonTicketPaySum, seasonTicketPaySum } from '@r1-frontend/api-domru/api-season-ticket/v1/season-ticket/pay-sum';\n\nimport { getTicketDataLayerLabel, pushDataLayer } from '~/src/features/payments-abn/components/SeasonTicketPayment/helpers';\nimport {\n setBonusesAmount,\n setIsUseBonuses,\n setPaymentSumIsError,\n setPaymentSumIsLoading,\n setSeasonTicket,\n} from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport validateBonusesAmount from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actions/validateBonusesAmount';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\nimport selectProviderId from '~/src/store/selectors/selectProviderId';\n\nconst updateSeasonTicket = (ticket: IAvailableSeasonTicket) => {\n return async(dispatch: TAppThunkDispatch, getState: TGetState) => {\n const state = getState();\n const { loyalty: { info: { bonuses } } } = state;\n const providerId = selectProviderId(state);\n\n const { id, countMonth, sumPrice, deltaPeriod, paySum } = ticket;\n\n let newPaySum = paySum;\n\n if (!paySum) {\n dispatch(setPaymentSumIsLoading(true));\n dispatch(setSeasonTicket(ticket));\n\n const response = await doRequest.apiSeasonTicket(seasonTicketPaySum(providerId, id));\n\n if (response.isSuccess) {\n newPaySum = response.payload.paySum;\n ticket.paySum = newPaySum;\n dispatch(setPaymentSumIsError(false));\n } else {\n dispatch(setPaymentSumIsError(true));\n }\n }\n\n pushDataLayer('subscription_type_choosed', getTicketDataLayerLabel({ countMonth, sumPrice, deltaPeriod }));\n\n const bonusesAmount = newPaySum ? Math.floor(newPaySum) : 0;\n\n batch(() => {\n dispatch(setSeasonTicket(ticket));\n dispatch(setPaymentSumIsLoading(false));\n dispatch(setBonusesAmount(Math.min(bonuses, bonusesAmount)));\n dispatch(setIsUseBonuses(false));\n dispatch(validateBonusesAmount());\n });\n };\n};\n\nexport default updateSeasonTicket;\n","import { getIsAbnLoyaltyProgramEnabled } from '~/src/features/domru-bonus/constants/abnVariants';\nimport { EPaymentTypeIds } from '~/src/features/payments-abn/store/actionCreators';\nimport { TState } from '~/src/store';\n\nconst isAbnProgramTermsEnabled = getIsAbnLoyaltyProgramEnabled();\n\nexport const selectCardPaySum = (state: TState) => {\n const { paymentData: { cardPaymentSum } } = state.payment;\n const { bonusesValue, isUseBonuses } = state.payment.paymentData;\n\n const bonuses = isAbnProgramTermsEnabled\n ? bonusesValue * 0.2\n : bonusesValue;\n\n const paySum = isUseBonuses\n ? Math.max(+(cardPaymentSum - bonuses).toFixed(2), 0)\n : cardPaymentSum;\n\n return paySum ? Math.ceil((paySum) * 100) / 100 : 0;\n};\n\nexport const selectSeasonTicketPaySum = (state: TState) => {\n const selectedTicket = state.seasonTicketPayment.seasonTicket;\n const { isUseBonuses, amount: amountBonuses } = state.seasonTicketPayment.bonusesInfo;\n\n const paySum = selectedTicket?.paySum || 0;\n const bonuses = isAbnProgramTermsEnabled\n ? amountBonuses * 0.2\n : amountBonuses;\n\n const seasonTicketPaySum = isUseBonuses\n ? Math.max(+(paySum - bonuses).toFixed(2), 0)\n : paySum;\n\n return seasonTicketPaySum ? Math.ceil((seasonTicketPaySum) * 100) / 100 : 0;\n};\n\n/**\n * Возвращает сумму к списанию, за вычетом суммы бонусов\n */\nexport const selectPaymentSum = (state: TState): number => {\n const { paymentTypeId } = state.payment;\n\n const isSeasonTicketPay = paymentTypeId === EPaymentTypeIds.WHOLESALE;\n\n return isSeasonTicketPay ? selectSeasonTicketPaySum(state) : selectCardPaySum(state);\n};\n","import { dataLayerPush } from '@r1-frontend/analytics/dataLayerPush';\n\nimport { CATEGORIES, EVENTS } from '@r1-frontend/shared/constants/analytics';\n\nexport const pushDataLayer = (action: string, label: string): void => {\n dataLayerPush({\n event: EVENTS.UAevent,\n category: CATEGORIES.newPayment,\n action,\n label,\n });\n};\n","import { IMethodData } from '@r1-frontend/ui-react/organisms/Payment/PaymentMethod';\n\nimport { setPaymentMethods } from '~/src/features/payments-abn/store/actionCreators';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nconst cardMethods = ['card', 'new-card'];\nconst isCardMethod = (method: IMethodData) => {\n return cardMethods.includes(method.methodType);\n};\n\n/**\n * Добавление методов оплаты новой и сохраненными картами\n * Если передан пустой массив методы удаляются\n */\nexport const addCardMethods = (newCardMethods: IMethodData[]) => {\n return (dispatch: TAppThunkDispatch, getState: TGetState): void => {\n const state = getState();\n const currentMethods = state.payment.methods;\n const currentCardMethods = currentMethods.filter(isCardMethod);\n\n // Добавляем сохраненные карты\n if (currentCardMethods.length === 0 && newCardMethods.length) {\n dispatch(setPaymentMethods([...currentMethods, ...newCardMethods]));\n return;\n }\n\n if (currentCardMethods.length) {\n const currentCardElementIndex = currentMethods.findIndex(isCardMethod);\n\n if (currentCardElementIndex >= 0) {\n const prevElements = currentMethods.slice(0, currentCardElementIndex);\n const afterElements = currentMethods.slice(currentCardElementIndex).filter(el => !isCardMethod(el));\n\n const newCardsIds = newCardMethods.map(el => el.id).sort().join('');\n const currentCardsIds = currentCardMethods.map(el => el.id).sort().join('');\n\n // Заменяем сохраненные карты\n if (newCardsIds !== currentCardsIds) {\n dispatch(setPaymentMethods([...prevElements, ...newCardMethods, ...afterElements]));\n }\n }\n }\n };\n};\n\n/**\n * Добавление методов оплаты, кроме методов оплаты картой\n */\nexport const addNewPayMethods = (newMethods: IMethodData[]) => {\n return (dispatch: TAppThunkDispatch, getState: TGetState): void => {\n const state = getState();\n const currentMethods = state.payment.methods;\n\n // Добавляем новые методы оплаты\n const currentMethodsIds = currentMethods.map(el => el.id);\n const noExistMethods = newMethods.filter(el => !currentMethodsIds.includes(el.id));\n\n if (noExistMethods.length) {\n dispatch(setPaymentMethods([...currentMethods, ...noExistMethods]));\n }\n };\n};\n\nexport default addNewPayMethods;\n","import { captureException } from '@sentry/node';\n\nimport { doRequest } from '@r1-frontend/do-request/index';\nimport { activateAutopayment } from '@r1-frontend/api-domru/api-pay/v1/autopayment/activate';\nimport { IAutoPaymentActivate } from '@r1-frontend/api-domru/api-pay/v1/autopayment/dto/IAutoPaymentActivate';\n\nimport { pushDataLayer } from '~/src/features/payments-abn/helpers/pushDataLayer';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\nimport { getClientAll } from '~/src/store/actions/auth/getClientAll';\n\nimport { IPaymentResult, setPaymentResult } from '../actionCreators';\n\n// подключение автоплатежа на привязанной карте (без оплаты и списания бонусов)\nconst bindedCardAutoPayConnect = () => {\n return async(dispatch: TAppThunkDispatch, getState: TGetState): Promise => {\n const {\n auth: { clientPersonal },\n city: { provider: { providerId } },\n payment: { method, result },\n } = getState();\n\n const cardId = method?.id;\n\n const { agreementId } = clientPersonal || {};\n if (agreementId) {\n try {\n const resp = await doRequest.apiPay(\n activateAutopayment(providerId, agreementId, Number(cardId), null, null),\n );\n const isAutoPaySuccess = resp.isSuccess;\n\n const respData: IPaymentResult = {\n ...result,\n isOpenPopup: true,\n isAutoPaySuccess,\n };\n dispatch(setPaymentResult(respData));\n pushDataLayer('click payment by old card', isAutoPaySuccess ? 'success' : 'error');\n dispatch(getClientAll());\n } catch (error) {\n captureException(error);\n }\n }\n\n };\n};\n\nexport default bindedCardAutoPayConnect;\n","import { doRequest } from '@r1-frontend/do-request/index';\nimport { makePaymentWithBinding } from '@r1-frontend/api-domru/api-pay/v1/payment/card';\nimport { IPayByCard } from '@r1-frontend/api-domru/api-pay/v1/payment/dto/IPayByCard';\n\nimport { selectCardPaySum } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/selectors/selectPaymentSum';\nimport { pushDataLayer } from '~/src/features/payments-abn/helpers/pushDataLayer';\nimport { updateTransaction } from '~/src/features/payments-abn/store/actions';\nimport { updateOffer } from '~/src/features/specialOffersContainer/store/actions/thunk';\nimport { selectOffer } from '~/src/features/specialOffersContainer/store/selectors';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\nimport { getClientAll } from '~/src/store/actions/auth/getClientAll';\n\nimport { IPaymentResult, setPaymentResult } from '../actionCreators';\n\ninterface IPayParams {\n deliveryRequestId: string,\n transaction?: string,\n transactionSum?: string,\n}\n// платеж с привязанной карты\nconst bindedCardPayment = (additionalParams?: IPayParams) => {\n return async(dispatch: TAppThunkDispatch, getState: TGetState): Promise => {\n const state = getState();\n\n const {\n city: { provider: { providerId } },\n payment: { paymentData: { paymentSum, email, isConnectAutoPay }, method, result },\n } = state;\n const popupOffer = selectOffer(state);\n const cardPaymentSum = selectCardPaySum(state);\n\n const cardId = method?.id;\n\n const connectAutopay = isConnectAutoPay && !additionalParams?.deliveryRequestId;\n\n const params: Record = {\n email: typeof email === 'string' ? email : email.value,\n autopay_act: +connectAutopay,\n payment_value: cardPaymentSum,\n binding_id: cardId,\n payment_source: 1,\n return_url: location.origin + '/payments-response?',\n };\n\n // Оплата заказа, подставляем delivery_request_id - для привязки оплаты к заказу\n if (additionalParams?.deliveryRequestId) {\n params.delivery_request_id = additionalParams.deliveryRequestId;\n }\n\n if (cardId) {\n const resp = await doRequest.apiPay(\n makePaymentWithBinding(providerId, params),\n );\n\n pushDataLayer('click payment by old card', resp.isSuccess ? 'success' : 'error');\n\n let isOpenPopup = true;\n\n if (resp.isSuccess && additionalParams) {\n const { transaction, transactionSum } = additionalParams;\n\n if (transaction && transactionSum) {\n const isTransactionPayed = paymentSum >= Number(transactionSum);\n\n dispatch(updateTransaction({\n id: transaction,\n payed: isTransactionPayed,\n }));\n\n if (popupOffer && isTransactionPayed) {\n isOpenPopup = false;\n dispatch(updateOffer());\n }\n }\n }\n\n const respData: IPaymentResult = {\n ...result,\n payStatus: resp.isSuccess ? resp?.payload?.payStatus ?? 0 : 0,\n isOpenPopup,\n isPayCardSuccess: resp.isSuccess,\n };\n\n dispatch(setPaymentResult(respData));\n dispatch(getClientAll());\n }\n };\n};\n\nexport default bindedCardPayment;\n","import { getIsAbnLoyaltyProgramEnabled } from '~/src/features/domru-bonus/constants/abnVariants';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nimport { setBonusesValueValidity } from '../actionCreators';\n\nconst isAbnProgramTermsEnabled = getIsAbnLoyaltyProgramEnabled();\n\nconst validateBonusesValue = (isValid?: boolean) => {\n return (dispatch: TAppThunkDispatch, getState: TGetState): void => {\n const {\n loyalty: { info: { bonuses: availableBonuses } },\n payment: { paymentData: { paymentSum, bonusesValue } },\n } = getState();\n\n if (isValid !== undefined) {\n dispatch(setBonusesValueValidity(isValid));\n } else {\n const value = isAbnProgramTermsEnabled\n ? bonusesValue > 0 && bonusesValue <= Math.min(paymentSum / 0.2, availableBonuses)\n : bonusesValue > 0 && bonusesValue <= Math.min(paymentSum, availableBonuses);\n\n dispatch(setBonusesValueValidity(value));\n }\n };\n};\n\nexport default validateBonusesValue;\n","import { MAX_PAYMENT, MIN_PAYMENT } from '~/src/constants';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nimport { EValidityStatus, setPaymentSumValidity, TPaymentSumValidity } from '../actionCreators';\n\nimport validateBonusesValue from './validateBonusesValue';\n\n// TODO - подозрение на избыточность этих данных в сторе, валидацию суммы можно перенести в селектор\nconst validatePaymentSum = (validationResult?: TPaymentSumValidity) => {\n return (dispatch: TAppThunkDispatch, getState: TGetState): void => {\n const {\n loyalty: { info: { bonuses: availableBonuses } },\n payment: { paymentData: { paymentSum, isUseBonuses, bonusesValue, isConnectAutoPay } },\n } = getState();\n\n if (validationResult) {\n dispatch(setPaymentSumValidity(validationResult));\n } else {\n const maxPaymentSum = isUseBonuses ? MAX_PAYMENT + Math.min(availableBonuses, bonusesValue) : MAX_PAYMENT;\n const minPaymentSum = isConnectAutoPay ? 0 : MIN_PAYMENT;\n\n const getValidationStatus = (): TPaymentSumValidity => {\n switch (true) {\n case paymentSum > maxPaymentSum:\n return {\n isValid: EValidityStatus.IS_UPPER_BOUND_ERROR,\n maxPaymentSum,\n };\n case paymentSum < minPaymentSum:\n return {\n isValid: EValidityStatus.IS_LOWER_BOUND_ERROR,\n minPaymentSum,\n };\n case (paymentSum <= maxPaymentSum) && (paymentSum >= minPaymentSum):\n default:\n return {\n isValid: EValidityStatus.IS_VALID,\n };\n }\n };\n\n dispatch(setPaymentSumValidity(getValidationStatus()));\n }\n\n if (isUseBonuses) {\n dispatch(validateBonusesValue());\n }\n };\n};\n\nexport default validatePaymentSum;\n","import { batch } from 'react-redux';\n\nimport { getIsAbnLoyaltyProgramEnabled } from '~/src/features/domru-bonus/constants/abnVariants';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nimport { fillBonusesValue, togglePayWithBonusesStatus } from '../actionCreators';\n\nimport validatePaymentSum from './validatePaymentSum';\n\nconst isAbnProgramTermsEnabled = getIsAbnLoyaltyProgramEnabled();\n\ntype TCalculateNotEditedBonusesValue = {\n paymentSum: number,\n availableBonuses: number,\n}\n\nconst calculateNotEditedBonusesValue = ({ paymentSum, availableBonuses }: TCalculateNotEditedBonusesValue) => {\n if (isAbnProgramTermsEnabled) {\n const requiredBonusesToPay = paymentSum / 0.2;\n\n return (requiredBonusesToPay > availableBonuses)\n ? availableBonuses\n : requiredBonusesToPay;\n }\n\n return (paymentSum > availableBonuses)\n ? availableBonuses\n : Math.trunc(paymentSum);\n};\n\nconst calculateByUseBonuses = (isTouchedBonusInput: boolean) => {\n return (dispatch: TAppThunkDispatch, getState: TGetState): void => {\n const {\n loyalty: { info: { bonuses: availableBonuses } },\n payment: { paymentData: { paymentSum, bonusesValue, isUseBonuses } },\n } = getState();\n\n dispatch(togglePayWithBonusesStatus(!isUseBonuses));\n\n const notEditedBonusesValue = calculateNotEditedBonusesValue({\n availableBonuses,\n paymentSum,\n });\n\n const bonusesSum = isUseBonuses\n ? 0\n : isTouchedBonusInput\n ? bonusesValue\n : notEditedBonusesValue;\n\n batch(() => {\n dispatch(fillBonusesValue(bonusesSum));\n dispatch(validatePaymentSum());\n });\n };\n};\n\nexport default calculateByUseBonuses;\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\n/*\n* Статус платежа\n* https://master.api-pay.sandbox.d2c.r-one.io/docs/v1#/Payment/7e1618c25d9948f7c8c91da0a7431187\n* https://master.api-pay.sandbox.d2c.r-one.io/docs/v1#/UnauthPayment/6c8244b7adc3803265477a5b76ba7d0b\n*/\n\nexport const getPaymentStatusAuth = (providerId: number, orderId: string): IRequest => {\n return {\n uri: '/payment/status',\n withAuth: true,\n withProvider: true,\n method: 'GET',\n queryParams: {\n billing_transaction_id: orderId,\n providerId,\n },\n };\n};\n\nexport const getPaymentStatusUnAuth = (providerId: number, orderId: string): IRequest => {\n return {\n uri: '/unauth-payment/status',\n withAuth: true,\n method: 'GET',\n queryParams: {\n billing_transaction_id: orderId,\n providerId,\n },\n };\n};\n","import { doRequest } from '@r1-frontend/do-request/index';\nimport { IStatusPayment } from '@r1-frontend/api-domru/api-pay/v1/payment/dto/IStatusPayment';\nimport { getPaymentStatusAuth, getPaymentStatusUnAuth } from '@r1-frontend/api-domru/api-pay/v1/payment/status';\n\nimport { getInfoByPaymentStatus, TPaymentStatus } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actions';\nimport { selectCardPaySum } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/selectors/selectPaymentSum';\nimport { pushDataLayer } from '~/src/features/payments-abn/helpers/pushDataLayer';\nimport { EPaymentTypeIds, IPaymentResult, setPaymentResult } from '~/src/features/payments-abn/store/actionCreators';\nimport { updateTransaction } from '~/src/features/payments-abn/store/actions';\nimport { updateOffer } from '~/src/features/specialOffersContainer/store/actions/thunk';\nimport { selectOffer } from '~/src/features/specialOffersContainer/store/selectors';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\nimport { getClientAll } from '~/src/store/actions/auth/getClientAll';\n\n// проверка статуса платежа после фрейма банка\nconst checkPaymentStatus = (order: string, transaction?: string, transactionSum?: string) => {\n return async(dispatch: TAppThunkDispatch, getState: TGetState): Promise => {\n const state = getState();\n\n const {\n auth: { isAuth },\n city: { provider: { providerId } },\n payment: { paymentData: { paymentSum, isConnectAutoPay }, isSaveCard, result, paymentTypeId },\n } = state;\n const popupOffer = selectOffer(state);\n const cardPaymentSum = selectCardPaySum(state);\n\n const resp = await doRequest.apiPay(\n isAuth\n ? getPaymentStatusAuth(providerId, order)\n : getPaymentStatusUnAuth(providerId, order),\n );\n // у покупки абонемента своя обработка статуса\n if (paymentTypeId === EPaymentTypeIds.WHOLESALE) {\n const actionParams: TPaymentStatus = resp.isSuccess\n ? {\n isSuccess: true,\n payStatus: resp.payload.payStatus,\n }\n : {\n isSuccess: false,\n };\n\n dispatch(getInfoByPaymentStatus(actionParams));\n } else {\n const currentKey: keyof Pick = cardPaymentSum ? 'isPayCardSuccess' : 'isAutoPaySuccess';\n\n pushDataLayer('click payment by new card', resp.isSuccess ? 'success' : 'error');\n\n let isOpenPopup = !!cardPaymentSum || isConnectAutoPay || isSaveCard;\n\n if (resp.isSuccess && transaction && transactionSum) {\n const isTransactionPayed = paymentSum >= Number(transactionSum);\n\n dispatch(updateTransaction({\n id: transaction,\n payed: isTransactionPayed,\n }));\n\n if (popupOffer && isTransactionPayed) {\n isOpenPopup = false;\n dispatch(updateOffer());\n }\n }\n\n const respData: IPaymentResult = {\n ...result,\n frameUrl: '',\n payStatus: resp.isSuccess ? resp?.payload.payStatus : undefined,\n [currentKey]: resp.isSuccess,\n isOpenPopup,\n };\n\n dispatch(setPaymentResult(respData));\n dispatch(getClientAll());\n }\n };\n };\n\nexport default checkPaymentStatus;\n","import { TAppThunkDispatch, TGetState } from '~/src/store';\n\nimport { setTransactions, TPaymentTransaction } from '../actionCreators';\n\nexport const createTransaction = (id: TPaymentTransaction['id']) => {\n return (dispatch: TAppThunkDispatch, getState: TGetState): void => {\n const {\n payment: { transactions },\n } = getState();\n\n const payload = [\n ...transactions,\n {\n id,\n payed: false,\n },\n ];\n\n dispatch(setTransactions(payload));\n };\n};\n\nexport default createTransaction;\n","import { TAppThunkDispatch, TGetState } from '~/src/store';\n\nimport { initializePaymentState } from '../actionCreators';\n// import { confirmedEmails } from '../selectors/emails';\n\n// TODO: раскомментировать строки 5, 14, 16, 23\n// после выполнения задачи биллинга https://ticket.ertelecom.ru/browse/DEV-124161\nconst initPaymentState = (querySum?: number) => {\n return (dispatch: TAppThunkDispatch, getState: TGetState): void => {\n const state = getState();\n const {\n auth: { isAuth, clientPayment },\n } = state;\n\n // const emails = confirmedEmails(state);\n\n const { paySum } = clientPayment || {};\n\n const paymentSum = querySum ? querySum : (isAuth && paySum) ? Math.floor(paySum * 100) / 100 : 0;\n // const email = (isAuth && !!emails.length) ? emails[0] : '';\n\n dispatch(initializePaymentState({\n paymentSum,\n // email,\n isUseBonuses: false,\n bonusesValue: 0,\n isSaveCard: true,\n isConnectAutoPay: false,\n agreement: '',\n agreementEnc: '',\n }));\n };\n};\n\nexport default initPaymentState;\n","import { captureException } from '@sentry/node';\n\nimport { doRequest } from '@r1-frontend/do-request/index';\nimport { addCard } from '@r1-frontend/api-domru/api-pay/v1/card/add';\nimport { IRegPayCard } from '@r1-frontend/api-domru/api-pay/v1/card/dto/IRegPayCard';\n\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nimport { IPaymentResult, setPaymentResult } from '../actionCreators';\n\n// подключение автоплатежа с привязкой новой карты (без оплаты и списания бонусов)\nconst newCardAutoPayConnect = () => {\n return async(dispatch: TAppThunkDispatch, getState: TGetState): Promise => {\n const {\n city: { provider: { providerId } },\n payment: { paymentData: { isConnectAutoPay }, autopayDay, result },\n } = getState();\n\n const return_url = location.origin + '/payments-response?';\n const params = {\n autopay_act: +isConnectAutoPay,\n autopay_day: autopayDay,\n return_url,\n payment_source: 1,\n };\n\n const resp = await doRequest.apiPay(\n addCard(providerId, params),\n );\n\n if (resp.isSuccess) {\n const respData: IPaymentResult = {\n ...result,\n frameUrl: resp.payload.payUrl,\n };\n dispatch(setPaymentResult(respData));\n } else {\n captureException(resp);\n }\n };\n};\n\nexport default newCardAutoPayConnect;\n","/* eslint-disable complexity */\nimport { captureException } from '@sentry/node';\n\nimport { doRequest } from '@r1-frontend/do-request/index';\nimport { IRegPayCard } from '@r1-frontend/api-domru/api-pay/v1/card/dto/IRegPayCard';\nimport { makePaymentAuth, makePaymentUnauth } from '@r1-frontend/api-domru/api-pay/v1/payment/add';\n\nimport { selectCardPaySum } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/selectors/selectPaymentSum';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nimport { IPaymentResult, setPaymentResult } from '../actionCreators';\n\nexport interface INewCardPayment {\n _agreement?: string,\n _agreementEnc?: string,\n deliveryRequestId?: string,\n}\n\ninterface IAuthRequestParams {\n save_card_flag: number,\n autopay_act: number,\n email: string,\n delivery_request_id?: string,\n}\n\ninterface IUnauthRequestParams {\n agreement_enc: string,\n number_value: string,\n email: string,\n delivery_request_id?: string,\n}\n\n// платеж с новой карты,\n// если есть оба входящих аргумента, то платеж проходит по апихе неавторизованного\n// (функционал оплаты с помощью get-параметров адресной строки)\nconst newCardPayment = (\n {\n _agreement,\n deliveryRequestId = '',\n }: INewCardPayment,\n) => {\n return async(dispatch: TAppThunkDispatch, getState: TGetState): Promise => {\n const state = getState();\n const {\n auth: { isAuth },\n city: { provider: { providerId } },\n payment: { paymentData: { email, isConnectAutoPay, agreement: stateAgreement, agreementEnc }, isSaveCard, result },\n } = getState();\n\n const cardPaymentSum = selectCardPaySum(state);\n\n const connectAutopay = isConnectAutoPay && !deliveryRequestId;\n const agreement = _agreement || stateAgreement;\n\n const requestParams = (isAuth && !(agreement || agreementEnc))\n ? {\n save_card_flag: +isSaveCard,\n autopay_act: +connectAutopay,\n email: typeof email === 'string' ? email : email.value,\n payment_value: cardPaymentSum,\n payment_source: 1,\n return_url: location.origin + '/payments-response?',\n }\n : {\n agreement_enc: agreementEnc,\n number_value: agreement,\n email: typeof email === 'string' ? email : email.value,\n payment_value: cardPaymentSum,\n payment_source: 1,\n return_url: location.origin + '/payments-response?',\n };\n\n // Оплата заказа, подставляем delivery_request_id - для привязки оплаты к заказу\n if (deliveryRequestId) {\n requestParams.delivery_request_id = deliveryRequestId;\n }\n const auth = (agreement || agreementEnc) ? false : isAuth;\n const resp = await doRequest.apiPay(\n auth\n ? makePaymentAuth(\n providerId,\n requestParams,\n )\n : makePaymentUnauth(\n providerId,\n requestParams,\n ),\n );\n if (resp.isSuccess) {\n const respData: IPaymentResult = {\n ...result,\n frameUrl: resp.payload.payUrl,\n queryAgreement: agreement || agreementEnc || '',\n };\n dispatch(setPaymentResult(respData));\n } else {\n captureException(resp);\n }\n };\n};\n\nexport default newCardPayment;\n","import { TAppThunkDispatch, TGetState } from '~/src/store';\n\nimport { setTransactions, TPaymentTransaction } from '../actionCreators';\n\nexport const removeTransaction = (id: TPaymentTransaction['id']) => {\n return (dispatch: TAppThunkDispatch, getState: TGetState): void => {\n const {\n payment: { transactions },\n } = getState();\n\n const index = transactions.findIndex(transaction => transaction.id === id);\n\n if (~index) {\n const payload = transactions.slice();\n\n payload.splice(index, 1);\n dispatch(setTransactions(payload));\n }\n };\n};\n\nexport default removeTransaction;\n","import { TAppThunkDispatch, TGetState } from '~/src/store';\n\nimport { fillBonusesValue, removePaymentQrCode, setPaymentResult } from '../actionCreators';\n\nconst setBonusesValue = (bonuses: number) => {\n return (dispatch: TAppThunkDispatch, getState: TGetState): void => {\n const { payment: { sbpData: { qrCode, qrLink }, result, paymentData: { isUseBonuses } } } = getState();\n\n if (qrCode || qrLink) {\n dispatch(removePaymentQrCode());\n }\n\n if (isUseBonuses && result.isBonusesSuccess) {\n dispatch(setPaymentResult({ ...result, isBonusesSuccess: false }));\n }\n\n dispatch(fillBonusesValue(bonuses));\n };\n};\n\nexport default setBonusesValue;\n","import { TAppThunkDispatch, TGetState } from '~/src/store';\n\nimport { fillPaymentSum, removePaymentQrCode, setPaymentResult } from '../actionCreators';\n\nconst setPaymentSum = (sum: number) => {\n return (dispatch: TAppThunkDispatch, getState: TGetState): void => {\n const { payment: { sbpData: { qrCode, qrLink }, result, paymentData: { isUseBonuses } } } = getState();\n\n if (qrCode || qrLink) {\n dispatch(removePaymentQrCode());\n }\n\n if (isUseBonuses && result.isBonusesSuccess) {\n dispatch(setPaymentResult({ ...result, isBonusesSuccess: false }));\n }\n\n dispatch(fillPaymentSum(sum));\n };\n};\n\nexport default setPaymentSum;\n","import { push } from '@r1-frontend/analytics/campaignLayer';\n\nimport { toggleIsShowSpecOffer } from '~/src/features/payments-abn/store/actionCreators';\nimport { specialOfferAnalytics } from '~/src/features/specialOffersContainer/analytics';\nimport { selectNewOrViewedOffers } from '~/src/features/specialOffersContainer/store/selectors';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nconst showSpecOffer = () => (dispatch: TAppThunkDispatch, getState: TGetState) => {\n const state = getState();\n const { stopper } = selectNewOrViewedOffers(state);\n\n if (!stopper) {\n return;\n }\n\n specialOfferAnalytics.view(stopper);\n push({ id: stopper.id, type: 'spec-offer', actionType: 'view' });\n\n dispatch(toggleIsShowSpecOffer(true));\n};\n\nexport default showSpecOffer;\n","import { pushDataLayer } from '~/src/features/payments-abn/components/SeasonTicketPayment/helpers';\nimport { setBonusesAmount } from '~/src/features/payments-abn/components/SeasonTicketPayment/store/actionCreators';\nimport { EPaymentTypeIds, setPaymentTypeId } from '~/src/features/payments-abn/store/actionCreators';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nconst updatePaymentTypeId = (id: EPaymentTypeIds) => {\n return async(dispatch: TAppThunkDispatch, getState: TGetState): Promise => {\n const {\n loyalty: { info: { bonuses } },\n wholesaleCheaperData: { wholesaleCheaperData },\n } = getState();\n\n dispatch(setPaymentTypeId(id));\n\n if (id === EPaymentTypeIds.WHOLESALE) {\n pushDataLayer('subscription_payment');\n dispatch(setBonusesAmount(Math.min(bonuses, Math.ceil(wholesaleCheaperData?.availableFlags[0]?.paySum || 0))));\n }\n };\n};\n\nexport default updatePaymentTypeId;\n","import { TAppThunkDispatch, TGetState } from '~/src/store';\n\nimport { setTransactions, TPaymentTransaction } from '../actionCreators';\n\nconst updateTransaction = ({\n id,\n payed,\n}: TPaymentTransaction) => {\n return (dispatch: TAppThunkDispatch, getState: TGetState): void => {\n const {\n payment: { transactions },\n } = getState();\n\n const index = transactions.findIndex(transaction => transaction.id === id);\n\n if (~index) {\n const payload = transactions.slice();\n\n payload.splice(index, 1, {\n id,\n payed,\n });\n dispatch(setTransactions(payload));\n }\n };\n};\n\nexport default updateTransaction;\n","import { ISpecOffer } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers';\n\nimport { BaseAnalytics } from '@r1-frontend/analytics/dataLayerPush';\n\nimport { getGaLabelByNavigationType } from '~/src/features/specialOffersContainer/helpers';\n\nexport class SpecialOfferAnalytics extends BaseAnalytics {\n constructor(category = 'VAS') {\n super();\n\n this.category = category;\n }\n\n private getLabel(offer: ISpecOffer) {\n return `discounts:${offer.title}${getGaLabelByNavigationType(offer)}`;\n }\n\n view(offer: ISpecOffer) {\n const label = this.getLabel(offer);\n this.send('view_promo_after_payment', label);\n }\n\n viewOffersList(label: string) {\n this.send('view_special_offer_list', label);\n }\n\n showPromoDetails(offer: ISpecOffer) {\n const label = this.getLabel(offer);\n this.send('click_promo_details_btn', label);\n }\n\n showAllPromo(offer: ISpecOffer) {\n const label = this.getLabel(offer);\n this.send('click_promo_list_btn', label);\n }\n\n instantConnect(offer: ISpecOffer) {\n const label = this.getLabel(offer);\n this.send('click_promo_action_btn', label);\n }\n\n connectWithPhone(offer: ISpecOffer) {\n const label = this.getLabel(offer);\n this.send('subscription_phone_click_connect', label);\n }\n\n successPhoneCheck(offer: ISpecOffer) {\n const label = this.getLabel(offer);\n this.send('subscription_phone_check_success', label);\n }\n\n errorPhoneCheck(offer: ISpecOffer) {\n const label = this.getLabel(offer);\n this.send('subscription_phone_check_error', label);\n }\n\n refillBalance(label: string) {\n this.send('click_refill_balance_and_connect', label);\n }\n\n showOfferDetails(offer: ISpecOffer) {\n const label = this.getLabel(offer);\n this.send('click_offer_details', label);\n }\n\n showOfferWithNewDesign(label: string) {\n this.send('open_promo_with_available_new_design', label);\n }\n\n successConnected(offer: ISpecOffer) {\n const label = this.getLabel(offer);\n this.send('send_promo_popup_success', label);\n }\n\n successDisconnected(offer: ISpecOffer) {\n const label = this.getLabel(offer);\n this.send('disconnect_promo_popup_success', label);\n }\n\n connectionError(offer: ISpecOffer) {\n const label = this.getLabel(offer);\n this.send('send_promo_popup_error', label);\n }\n}\n\nexport const specialOfferAnalytics = new SpecialOfferAnalytics();\n","import { TPromoBillingState } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers/dto/ISpecOffer';\n\nimport { getDefaultCallback } from '~/src/features/specialOffersContainer/helpers';\n\nexport const { DefaultCallback } = getDefaultCallback('onActivate');\n\nexport const billingStateMap: { [key: number]: TPromoBillingState } = {\n 1344: 'connected',\n 1345: 'declined',\n 1346: 'viewed',\n 1347: 'created',\n 1348: 'new',\n 1352: 'disconnected',\n 2267: 'pending',\n};\n","import { TPromoCallback } from '~/src/features/specialOffersContainer/types';\n\nexport const getDefaultCallback = (key: T) => ({\n DefaultCallback: key,\n});\n","import { ISpecOffer } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers';\n\nexport const getGaLabelByNavigationType = (offer: ISpecOffer): string => {\n const prefix = ' | type:';\n const { navigation, benefits } = offer;\n\n if (navigation?.type) {\n switch (navigation.type) {\n case 'equipment':\n return `${prefix}equipment`;\n case 'multisubscription':\n return `${prefix}multisubscription`;\n case 'promoPacket':\n return `${prefix}tariff`;\n case 'speedBonusWithRequest':\n return `${prefix}speed_bonus_with_request`;\n case 'pendingConnection':\n return '';\n }\n } else {\n const needPhoneBenefitIndex = benefits?.findIndex(benefit => !!benefit.needPhone);\n\n if (!benefits || needPhoneBenefitIndex === -1) {\n return `${prefix}ordinary`;\n } else {\n return `${prefix}with_phone_number`;\n }\n }\n};\n","import { TPromoAditionalCallback } from '~/src/features/specialOffersContainer/types';\n\nexport const isCallbackDefined = (callback?: TPromoAditionalCallback): callback is TPromoAditionalCallback => !!callback;\n","import { getABNVariant } from '~/src/helpers/abn-tests';\n\nconst detailsDesignAbTest = {\n testName: 'special_offer_details',\n variants: {\n new: 'redesign_on',\n current: 'redesign_off',\n },\n};\n\nexport const isNewDetailsDesign = () => getABNVariant(detailsDesignAbTest.testName) === detailsDesignAbTest.variants.new;\n","import { batch } from 'react-redux';\n\nimport { ISpecOffer } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers';\n\nimport { setIsPopupOpened, setSelectedOfferId } from '~/src/features/specialOffersContainer/store/actions';\nimport { loadOffers } from '~/src/features/specialOffersContainer/store/actions/thunk/index';\nimport { TAppThunkDispatch } from '~/src/store';\n\nexport const loadOffer = (requestId: ISpecOffer['requestId']) => async(dispatch: TAppThunkDispatch): Promise => {\n await dispatch(loadOffers());\n\n batch(() => {\n dispatch(setSelectedOfferId(requestId));\n dispatch(setIsPopupOpened(true));\n });\n};\n","import { IRequestDto } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers/dto/RequestDto';\n\nimport { IRequest } from '@r1-frontend/shared/types/IRequest';\n\n/**\n * Список специальных предложений\n * @link https://master.spec-offer.sandbox.d2c.r-one.io/docs#/Специальные%20предложения/SpecOfferReqScopedController_getSpecOffers\n */\nexport const specOffers = (providerId: number, queryParams?: IRequestDto): IRequest => ({\n uri: `/api/v1/${providerId}`,\n method: 'GET',\n withAuth: true,\n withProvider: true,\n queryParams,\n});\n","import { doRequest } from '@r1-frontend/do-request';\nimport { ISpecOffer, specOffers } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers';\n\nimport { billingStateMap } from '~/src/features/specialOffersContainer/constants';\nimport { setIsLoadingOffers, setOffers } from '~/src/features/specialOffersContainer/store/actions';\nimport { TSpecOffer } from '~/src/features/specialOffersContainer/types';\nimport { TDispatch, TGetState } from '~/src/store';\nimport selectProviderId from '~/src/store/selectors/selectProviderId';\n\nexport const loadOffers = (force = false) => async(dispatch: TDispatch, getState: TGetState): Promise => {\n const state = getState();\n const providerId = selectProviderId(state);\n const {\n auth: { clientPersonal },\n specOffers: { offers: storeOffers },\n } = state;\n\n if ((storeOffers.length && !force) || !clientPersonal) {\n return;\n }\n\n dispatch(setIsLoadingOffers(true));\n\n const response = await doRequest.specOffer(\n specOffers(providerId, { isShowSpeedBonusesWithServiceEngineerVisit: 1 }),\n );\n\n if (response.isSuccess) {\n const offers = response.payload.map(({ state: stepId, ...offer }) => {\n const copy: TSpecOffer = {\n ...offer,\n state: stepId,\n billingState: billingStateMap[stepId] ?? 'viewed',\n isLoading: false,\n isConnecting: false,\n };\n\n /**\n * Ad hoc\n * TODO убрать, когда будет доработано на бэке\n */\n if (copy.billingState === 'pending') {\n copy.navigation = {\n type: 'pendingConnection',\n id: 0,\n category: 'routers',\n };\n }\n\n return copy;\n });\n dispatch(setOffers(offers));\n }\n\n dispatch(setIsLoadingOffers(false));\n};\n","import { setOffers } from '~/src/features/specialOffersContainer/store/actions';\nimport { TSpecOffer } from '~/src/features/specialOffersContainer/types';\nimport { TDispatch, TGetState } from '~/src/store';\n\nexport type TSetOfferPayload = {\n id?: TSpecOffer['id'],\n index?: number,\n value: Partial,\n}\n\nexport const setOffer = ({\n id,\n index: cachedIndex,\n value,\n}: TSetOfferPayload) => (dispatch: TDispatch, getState: TGetState) => {\n const { specOffers: { offers } } = getState();\n const updatedOffers = offers.map(\n (offer, index) => (cachedIndex === index || offer.id === id) ? { ...offer, ...value } : offer,\n );\n dispatch(setOffers(updatedOffers));\n};\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\nimport { IActivateRequest } from './dto/requestDto';\n\n/**\n * Подключение спец. предложения\n * @param {Object} requestBody - объект данных, передаваемых в запрос\n * @param {number} requestBody.specOfferId - id спец. предложения (ISpecOffer['id'])\n * @param {number} requestBody.currentStepId - состояние спец. предложения (ISpecOffer['state'])\n * @param {number} [requestBody.requestId] - id заявки на подключение (ISpecOffer['requestId'])\n *\n * {@link https://master.spec-offer.sandbox.d2c.r-one.io/docs#/%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D0%BF%D1%80%D0%B5%D0%B4%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F/SpecOfferReqScopedController_activate Documentation}\n */\nexport const activate = ({ specOfferId, ...reqBody }: IActivateRequest): IRequest => ({\n uri: `/v1/spec-offers/${specOfferId}/activate`,\n method: 'POST',\n withAuth: true,\n withProvider: true,\n body: JSON.stringify(reqBody),\n});\n","import { batch } from 'react-redux';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport { activate, deactivate } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers';\nimport { IActivateResponse } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers/activate/dto/responseDto';\nimport { IDeactivateResponse } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers/deactivate/dto/responseDto';\nimport { EOfferState } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers/dto/ISpecOffer';\n\nimport { removeTransaction } from '~/src/features/payments-abn/store/actions';\nimport { specialOfferAnalytics } from '~/src/features/specialOffersContainer/analytics';\nimport {\n setErrorMessage,\n setIsPopupOpened,\n setOfferTransaction,\n setPopupState,\n setSelectedOfferId,\n} from '~/src/features/specialOffersContainer/store/actions';\nimport { loadOffers, setOffer } from '~/src/features/specialOffersContainer/store/actions/thunk';\nimport { selectOffer } from '~/src/features/specialOffersContainer/store/selectors';\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\n\nexport const updateOffer = () => async(dispatch: TAppThunkDispatch, getState: TGetState): Promise => {\n const state = getState();\n const offer = selectOffer(state);\n\n if (!offer) {\n return;\n }\n\n const {\n id: offerId,\n state: currentStep,\n requestId,\n } = offer;\n const { isPopupOpened, transaction } = state.specOffers;\n\n const isDisconnectingAction = currentStep === EOfferState.CONNECTED;\n\n dispatch(setOffer({\n id: offerId,\n value: { ['isConnecting']: true },\n }));\n\n const response = await doRequest.specOffer(\n isDisconnectingAction\n ? deactivate(offerId)\n : activate({\n specOfferId: offerId,\n currentStepId: currentStep,\n requestId,\n }),\n );\n\n dispatch(setOffer({\n id: offerId,\n value: { ['isConnecting']: false },\n }));\n\n if (!response.isSuccess) {\n specialOfferAnalytics.connectionError(offer);\n\n batch(() => {\n dispatch(setErrorMessage(response.error.message));\n dispatch(setIsPopupOpened(false));\n dispatch(setPopupState('connectionError'));\n });\n\n return;\n }\n\n isDisconnectingAction\n ? specialOfferAnalytics.successDisconnected(offer)\n : specialOfferAnalytics.successConnected(offer);\n\n const { currentStepId } = response.payload;\n\n if (currentStepId !== EOfferState.DISCONNECTED) {\n dispatch(setOffer({\n id: offerId,\n value: { state: currentStepId },\n }));\n }\n\n if (isPopupOpened) {\n dispatch(setSelectedOfferId(requestId));\n }\n\n batch(() => {\n dispatch(setIsPopupOpened(false));\n dispatch(setPopupState('connected'));\n dispatch(setOfferTransaction(null));\n dispatch(removeTransaction(transaction ?? ''));\n dispatch(loadOffers(true));\n });\n};\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\n/**\n * Отключение спец. предложения\n * @param {number} specOfferId - id спец. предложения (ISpecOffer['id'])\n *\n * {@link https://master.spec-offer.sandbox.d2c.r-one.io/docs#/%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D0%BF%D1%80%D0%B5%D0%B4%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F/SpecOfferReqScopedController_deactivate Documentation}\n */\nexport const deactivate = (specOfferId: number): IRequest => ({\n uri: `/v1/spec-offers/${specOfferId}/deactivate`,\n method: 'POST',\n withAuth: true,\n withProvider: true,\n});\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\n/**\n * Просмотр спец. предложения (переводит СП на шаг 1346 (EOfferState.VIEWED))\n * @param {number} specOfferId - id спец. предложения (ISpecOffer['id'])\n *\n * {@link https://master.spec-offer.sandbox.d2c.r-one.io/docs#/%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D0%BF%D1%80%D0%B5%D0%B4%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F/SpecOfferReqScopedController_seen Documentation}\n */\nexport const view = (specOfferId: number): IRequest => ({\n uri: `/v1/spec-offers/${specOfferId}/view`,\n method: 'POST',\n withAuth: true,\n withProvider: true,\n});\n","import { batch } from 'react-redux';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport { view } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers';\nimport { EOfferState } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers/dto/ISpecOffer';\nimport { IViewResponse } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers/view/dto/responseDto';\n\nimport { push as campaignLayerPush } from '@r1-frontend/analytics/campaignLayer';\n\nimport { specialOfferAnalytics } from '~/src/features/specialOffersContainer/analytics';\nimport { setIsPopupOpened, setSelectedOfferId } from '~/src/features/specialOffersContainer/store/actions';\nimport { setOffer } from '~/src/features/specialOffersContainer/store/actions/thunk';\nimport { TSpecOffer } from '~/src/features/specialOffersContainer/types';\nimport { TAppThunkDispatch } from '~/src/store';\n\nexport const viewOffer = (offer: TSpecOffer, withAnalytics = true) => async(dispatch: TAppThunkDispatch) => {\n const { title, id, requestId, state, isShowNewDetail } = offer;\n\n batch(() => {\n dispatch(setSelectedOfferId(requestId));\n dispatch(setIsPopupOpened(true));\n });\n\n if (withAnalytics) {\n specialOfferAnalytics.showPromoDetails(offer);\n\n if (isShowNewDetail) {\n specialOfferAnalytics.showOfferWithNewDesign(`discounts:${title}`);\n }\n }\n\n campaignLayerPush({ id, type: 'spec-offer', actionType: 'open' });\n\n if (state === EOfferState.NEW) {\n const response = await doRequest.specOffer(view(id));\n\n if (response.isSuccess) {\n dispatch(setOffer({\n id,\n value: { state: response.payload.currentStepId },\n }));\n }\n }\n};\n","import { createSelector } from 'reselect';\n\nimport { TState } from '~/src/store';\n\nexport const selectIsOfferTransactionPayed = createSelector(\n [\n (state: TState) => ({\n transactions: state.payment.transactions,\n offerTransaction: state.specOffers.transaction,\n }),\n ],\n ({ transactions, offerTransaction }) => transactions.some(({ id, payed }) => id === offerTransaction && payed),\n);\n","import { createSelector } from 'reselect';\n\nimport { EOfferState } from '@r1-frontend/api-domru/spec-offer/v1/spec-offers/dto/ISpecOffer';\n\nimport { TState } from '~/src/store';\n\nexport const selectNewOrViewedOffers = createSelector(\n (state: TState) => state.specOffers.offers,\n (offers) => {\n const stoppers = offers\n .filter(({ state, paySum }) => (state === EOfferState.NEW || state === EOfferState.VIEWED) && !paySum);\n\n return {\n stopper: stoppers[0],\n hasOtherOffers: stoppers.length > 1,\n };\n },\n);\n","import { createSelector } from 'reselect';\n\nimport { TState } from '~/src/store';\n\nexport const selectOffer = createSelector(\n (state: TState) => state.specOffers,\n ({ offers, selectedOfferId }) => offers.find(offer => offer.requestId === selectedOfferId),\n);\n","import dayjs from 'dayjs';\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\n\ndayjs.extend(customParseFormat);\n\nconst months = [\n 'января',\n 'февраля',\n 'марта',\n 'апреля',\n 'мая',\n 'июня',\n 'июля',\n 'августа',\n 'сентября',\n 'октября',\n 'ноября',\n 'декабря',\n];\n\nexport const hhmm = date => {\n const hh = String(date.getHours()).padStart(2, '0');\n const mm = String(date.getMinutes()).padStart(2, '0');\n\n return `${hh}:${mm}`;\n};\n\n/**\n * Дата, месяц\n * @param {Date} date\n * @returns {string} '01.09'\n */\nexport const dateWithoutYear = date => date.toLocaleString('ru-RU', { day: 'numeric', month: 'numeric' });\n\n/** Дата, месяц, год строкой месяц\n * @param {Date | number} date - дата\n * @return {string} '01.09.2021'\n */\nexport const ddmmyyyy = date => {\n const dd = String(date.getDate()).padStart(2, '0');\n const mm = String(date.getMonth() + 1).padStart(2, '0');\n const yyyy = date.getFullYear();\n\n return dd + '.' + mm + '.' + yyyy;\n};\n\n/**\n * Дата, месяц, год строкой месяц в родительном падеже\n * @param {Date} date - дата\n * @param {boolean} isGenitive - в родительном\n * @return {string} дата вида '10 января 2020'\n */\nexport function ddmmmmyyyy(date, isGenitive = true, withUTC = false) {\n if (date instanceof Date) {\n let dd;\n if (withUTC) {\n dd = String(date.getUTCDate()).padStart(2, '0');\n } else {\n dd = String(date.getDate()).padStart(2, '0');\n }\n const mmmm = monthString(date, !isGenitive);\n const yyyy = date.getFullYear();\n\n return dd + ' ' + mmmm + ' ' + yyyy;\n }\n throw Error('аргумент date должен быть экземплятором класса Date');\n}\n\n/**\n * День месяца, числом\n * @param {string} date - дата строкой '03.09.2021'\n * @return {number} день вида 3\n */\nexport const dd = date => {\n const dateArr = date.split('.');\n return parseInt(dateArr[0], 10);\n};\n\n/**\n * Дата, месяц строкой\n * @param {string} date - дата строкой '03.09.2021'\n * @return {string} дата вида '3 сентября'\n */\nexport const ddmm = date => {\n const dateArr = date.split('.');\n const dd = parseInt(dateArr[0], 10);\n const mm = months[parseInt(dateArr[1] - 1)];\n\n return dd + ' ' + mm;\n};\n\n/**\n * @param {Date} date\n * @param {Boolean} padStart\n * @return {string} '03 сентября'\n */\nexport function ddmmm(date, padStart = true) {\n let dd = date.getDate().toString();\n if (padStart) {\n dd = dd.padStart(2, '0');\n }\n const mmm = months[date.getMonth()];\n return `${dd} ${mmm}`;\n}\n\n/**\n * get month string from date\n * @param {Date} date\n * @param {boolean} plain\n * @returns {string}\n */\nexport const monthString = (date, plain = true) => {\n switch (date.getMonth()) {\n case 0:\n return plain ? 'январь' : 'января';\n case 1:\n return plain ? 'февраль' : 'февраля';\n case 2:\n return plain ? 'март' : 'марта';\n case 3:\n return plain ? 'апрель' : 'апреля';\n case 4:\n return plain ? 'май' : 'мая';\n case 5:\n return plain ? 'июнь' : 'июня';\n case 6:\n return plain ? 'июль' : 'июля';\n case 7:\n return plain ? 'август' : 'августа';\n case 8:\n return plain ? 'сентябрь' : 'сентября';\n case 9:\n return plain ? 'октябрь' : 'октября';\n case 10:\n return plain ? 'ноябрь' : 'ноября';\n case 11:\n return plain ? 'декабрь' : 'декабря';\n }\n};\n\n/**\n * @param {Date} date\n * @param {Number} nextMonthCount\n * @param {Boolean} isPlain\n * @returns {string}\n */\nexport function getMonthName(date, nextMonthCount = 0, isPlain = true) {\n const innerDate = new Date(date);\n if (nextMonthCount > 0) {\n innerDate.setMonth(innerDate.getMonth() + nextMonthCount);\n }\n return monthString(innerDate, isPlain);\n}\n\n/**\n * Месяц в Родительном падеже\n * @param {Number} num - номер месяца начиная с 0\n * @return {string}\n */\nexport const getNameMonth = num => {\n return months[num];\n};\n\n/**\n * Преобразование даты формата 11.12.2019 в формат 2019-12-11 или наоборот\n * @param {string} date - дата в формате 11.12.2019 или 2019-12-11\n * @return {string}\n */\nexport const formatDate = (date) => {\n // разделитель - тире или точка\n return date.indexOf('-') !== -1\n ? date.split('-').reverse().join('.')\n : date.split('.').reverse().join('-');\n};\n\n/**\n * Парсим дату вида \"25.06.2020 12:38:30\", \"25.06.2020 4:38\" или \"25.06.2020\"\n * @param {string} string\n * @return {Date}\n */\nexport function parseRusDate(string) {\n // 1 2 3 4 5 6 7\n const regExp = /^(\\d{2})\\.(\\d{2})\\.(\\d{4})(\\s(\\d{1,2}):(\\d{2}):?(\\d{2})?)?$/g;\n const matched = regExp.exec(string.trim());\n\n if (matched == null) {\n throw Error('Некорректная строка c датой');\n }\n\n if (matched[4] == null) {\n return new Date(Date.UTC(matched[3], +matched[2] - 1, matched[1], 0, 0, 0));\n } else {\n return new Date(Date.UTC(matched[3], +matched[2] - 1, matched[1], matched[5], matched[6], matched[7] || 0));\n }\n}\n\n/**\n * @param {Date} date\n * @return {string} \"2020-12-20\"\n */\nexport function toISODateString(date) {\n return dayjs(date).format('YYYY-MM-DD');\n}\n\n\n/** TODO - аналог addDays убрать дубль, ps:addDays - более понятное название, оставить его\n * Новая дата + count дней\n * @deprecated use addDays\n * @param {number} count\n * @param {Date} date\n * @return {Date}\n */\nexport function dateNextDay(count, date = new Date()) {\n const now = new Date(date);\n now.setDate(now.getDate() + count);\n return now;\n}\n\n/** TODO - аналог dateNextDay убрать дубль\n * Добавляет к дате указанное кол-во дней\n * @param {Date} date\n * @param {number} days\n * @returns {Date}\n */\nexport const addDays = (date, days) => {\n const dateTo = new Date(date);\n dateTo.setDate(dateTo.getDate() + days);\n return dateTo;\n};\n\nexport const generateArrayOfYears = (threshold = 9) => {\n const max = new Date().getFullYear();\n const min = max - threshold;\n const years = [];\n\n for (let i = max; i >= min; i--) {\n years.push(i);\n }\n\n return years;\n};\n\n/** Вычисление даты с прибавлением нескольких месяцев\n * @param {number | string | Date} dateValue - дата\n * @param {number} amount - количество месяцев\n * @return {Date}\n */\nexport const addMonths = (dateValue, amount) => {\n const date = new Date(dateValue);\n const dayOfMonth = date.getDate();\n\n const endOfDesiredMonth = new Date(dateValue);\n endOfDesiredMonth.setTime(date.getTime());\n endOfDesiredMonth.setMonth(date.getMonth() + amount + 1, 0);\n const daysInMonth = endOfDesiredMonth.getDate();\n\n if (dayOfMonth >= daysInMonth) {\n return endOfDesiredMonth;\n } else {\n date.setFullYear(\n endOfDesiredMonth.getFullYear(),\n endOfDesiredMonth.getMonth(),\n dayOfMonth,\n );\n return date;\n }\n};\n\n/** Приведение даты к формату 'ru-RU'\n * @param {number | string | Date} date - дата\n * @return {string} '22.30.15'\n */\nexport const dateToLocaleRu = (date) => new Date(date).toLocaleDateString('ru-RU');\n\nexport const daysDifinition = {\n yesterday: 'вчера',\n today: 'сегодня',\n tomorrow: 'завтра',\n afterTomorrow: 'послезавтра',\n};\n\n/**\n * Возвращает Сегодня/Завтра/Послезавтра/Вчера\n * @param {number} diffDay - разница в днях между датами (\"11.10.2020\" - \"10.10.2020\" равна 1 день)\n * @return {string} 'Сегодня' || ''\n */\nexport const getDateDefinition = (diffDay) => {\n switch (true) {\n case (diffDay === -1):\n return daysDifinition.yesterday;\n case (diffDay === 0):\n return daysDifinition.today;\n case (diffDay === 1):\n return daysDifinition.tomorrow;\n case (diffDay === 2):\n return daysDifinition.afterTomorrow;\n default:\n return '';\n }\n};\n","const f_s = '.'; // разделитель дробной части\n\n/**\n * В число\n * @param {*} v - значение\n * @return {number}\n */\nexport const toNumber = v => typeof v === 'string' ? parseFloat(v.toString().replace(' ', '').replace(',', f_s)) : Number(v);\n\n/**\n * Число?\n * @param {*} v - значение\n * @return {boolean}\n */\nexport const isNumeric = v => {\n if (typeof v === 'number') {\n return true;\n }\n const str = (v || '').toString();\n if (!str) {\n return false;\n }\n const float = toNumber(str);\n return !isNaN(float) && isFinite(float);\n};\n\n/**\n * Форматирование цены\n * @param {(number|string)} amount число\n * @param {number} [x=3] длина секции\n * @param {string} [s=' '] разделитель секций\n * @param {number} [d=0] длина дробной части\n * @param {string} [c='.'] разделитель дробной части\n * @return {string}\n */\nexport const toCurrency = (amount, x = 3, s = ' ', d, c = f_s) => {\n const n = toNumber(amount);\n d = d || (x => (x.includes('.') ? x.split('.').pop().length : 0))(n.toString());\n const str = n.toFixed(Math.max(0, ~~d));\n const re = `\\\\d(?=(\\\\d{${x}})+${d > 0 ? '\\\\D' : '$'})`;\n return (c ? str.replace('.', c) : str).replace(new RegExp(re, 'g'), `$&${s}`);\n};\n\n/**\n * Целая часть от деления\n * @param {Number} a\n * @param {Number} b\n * @return {number}\n */\nexport function integerDivision(a, b) {\n return (a - a % b) / b;\n}\n","import { Response } from 'express';\n\nimport { doRequest } from '@r1-frontend/do-request';\nimport { getInfoAll } from '@r1-frontend/api-domru/api-profile/v2/info/all';\nimport { ResponseContactDto } from '@r1-frontend/api-domru/api-profile/v2/info/all/dto/ResponseDto';\n\nimport { getAgreementNumber } from '@r1-frontend/shared/helpers/getAgreementNumber';\n\nimport { TAppThunkDispatch, TGetState } from '~/src/store';\nimport { setClientPayment, setErrorClientPayment, setFetchClientPayment } from '~/src/store/actionCreators/auth';\nimport { logout } from '~/src/store/actions/auth/logout';\n\n/**\n * Обновляет сумму к оплате и другую платежную информацию в сторе\n */\nexport function getClientPayment(response?: Response) {\n return async(dispatch: TAppThunkDispatch, getState: TGetState) => {\n const state = getState();\n\n if (!state.auth.isAuth) {\n return;\n }\n\n dispatch(setFetchClientPayment(null));\n\n const providerId = state.city.provider.providerId;\n const accessToken = state.auth.accessToken;\n const agreementNumber = getAgreementNumber();\n\n const resp = await doRequest.apiProfile(\n getInfoAll(providerId, accessToken, agreementNumber, ['payment']),\n );\n if (resp.isSuccess) {\n const { payment } = resp.payload;\n dispatch(setClientPayment(payment));\n } else {\n dispatch(setErrorClientPayment(null));\n\n if (resp.error.code.toString() === '401') {\n dispatch(logout(response));\n }\n }\n };\n}\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\nconst DEFAULT_CATEGORY = 4;\n\nexport interface IPayRequest {\n bonusValue: number,\n categoryId?: number,\n}\n\nexport interface IPayResponse {\n loyaltyNumber: string,\n bonuses: number,\n}\n\n/*\n* Оплата бонусами программы лояльности\n* https://master.api-loyalty.sandbox.d2c.r-one.io/docs/v1#/Loyalty%20Program/a4ebbb3d7a3998eae9f0b25f495e354f\n* */\nexport const pay = (providerId: number, { bonusValue, categoryId = DEFAULT_CATEGORY }: IPayRequest): IRequest => ({\n uri: '/v1/program/pay',\n method: 'POST',\n withAuth: true,\n headers: { providerId: `${providerId}` },\n body: JSON.stringify({\n scores: bonusValue,\n categoryId,\n }),\n});\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\ntype TParams = {\n binding_id: number,\n agreement_id: number,\n pay_day?: number,\n required_sum?: number,\n}\n/*\n* https://master.api-pay.sandbox.d2c.r-one.io/docs/v1#/Autopayment/47507f786754ce5301b0cd45f3ad94d8\n*\n*/\n\nexport const activateAutopayment = (\n providerId: number,\n agreement: number,\n bindingCardId: number,\n requiredSum: number | null,\n payDay: number | null,\n): IRequest => {\n\n const params: TParams = {\n binding_id: bindingCardId,\n agreement_id: agreement,\n };\n if (payDay) {\n params.pay_day = payDay;\n }\n if (requiredSum) {\n params.required_sum = requiredSum;\n }\n\n return {\n uri: '/autopayment/activate',\n withAuth: true,\n withProvider: true,\n method: 'POST',\n body: JSON.stringify({ ...params }),\n queryParams: {\n providerId,\n },\n };\n};\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\n/*\n* Предавторизация карты клиента, с временным удержанием 1 рубля и последующей разблокировкой, с сохранением карты клиента.\n* https://master.api-pay.sandbox.d2c.r-one.io/docs/v1#/Card/8470d0f60d933d5c627024257b9b614b\n*/\n\nexport const addCard = (providerId: number, additionalParams = {}): IRequest => ({\n uri: '/card/add',\n withAuth: true,\n withProvider: true,\n method: 'POST',\n body: JSON.stringify(additionalParams),\n queryParams: {\n providerId,\n },\n});\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\n/*\n* Регистрация платежа\n* https://master.api-pay.sandbox.d2c.r-one.io/docs/v1#/Payment/f5610719af05925870dc02555a45b38d\n*\n*/\nexport const makePaymentAuth = (providerId: number, params = {}): IRequest => ({\n uri: '/payment/add',\n withAuth: true,\n withProvider: true,\n method: 'POST',\n body: JSON.stringify(params),\n queryParams: {\n providerId,\n },\n});\n\n/*\n* Простая оплата без токена по timestamp и client_secret\n* https://master.api-pay.sandbox.d2c.r-one.io/docs/v1#/UnauthPayment/2daace48edd50f86130bdbe7fc5cd644\n*/\nexport const makePaymentUnauth = (providerId: number, params = {}): IRequest => ({\n uri: '/unauth-payment/add',\n method: 'POST',\n body: JSON.stringify(params),\n queryParams: {\n providerId,\n },\n});\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\n/*\n* Оплата по связке acquiring_pay_with_binding\n* https://master.api-pay.sandbox.d2c.r-one.io/docs/v1#/Payment/99e4f24be96466dad78eef6d529b61c7\n*/\n\nexport const makePaymentWithBinding = (providerId: number, params = {}): IRequest => ({\n uri: '/payment/card',\n withAuth: true,\n withProvider: true,\n method: 'POST',\n body: JSON.stringify(params),\n queryParams: {\n providerId,\n },\n});\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\n/*\n* Создание из строки Qr кода\n* https://master.api-pay.sandbox.d2c.r-one.io/docs/v1#/Qr/77410f26d166a98d48d84a242c4b54fc\n*/\n\nexport const getQrCode = (providerId: number, qrLink: string): IRequest => {\n\n return {\n uri: `/qr/index?url=${encodeURIComponent(qrLink)}`,\n method: 'GET',\n queryParams: {\n providerId,\n },\n withProvider: true,\n };\n};\n","import { IRequest } from '@r1-frontend/shared/types/IRequest';\n\ninterface IQrLinkRequestProps {\n providerId: number,\n userAgreement: string,\n paySum: number,\n}\n\nconst AMOUNT_IN_KOPECKS = 100;\n\n/*\n* Получение qr-кода\n* https://master.api-pay.sandbox.d2c.r-one.io/docs/v2#/VTB%20%D0%B1%D1%8B%D1%81%D1%82%D1%80%D1%8B%D0%B5%20%D0%BF%D0%BB%D0%B0%D1%82%D0%B5%D0%B6%D0%B8/aa52a109f8d5e9b593ca97af7d58ea39\n*/\n\nexport const getQrLink = ({ providerId, userAgreement, paySum }: IQrLinkRequestProps): IRequest =>{\n const postParams = {\n agreement_number: userAgreement,\n pay_amount: paySum * AMOUNT_IN_KOPECKS,\n };\n\n return {\n uri: '/vtb-pay/create-and-get-qr-code',\n method: 'POST',\n queryParams: {\n providerId,\n },\n withProvider: true,\n body: JSON.stringify(postParams),\n };\n};\n\n","export interface ISpecOfferTerm {\n title: string,\n description: string,\n pdfTitle: string,\n pdf?: string,\n}\n\nexport interface ISpecOfferPicture {\n url: string,\n urlWebp?: string,\n}\n\nexport interface ISpecOfferBenefit {\n id: number,\n type: 'content' | 'router',\n title?: string,\n image?: string,\n imageLabel?: string,\n needPhone?: 0 | 1 | null,\n description?: string | null,\n}\n\nexport interface ISpecOfferNavigation {\n id: number,\n type: 'promoPacket' | 'multisubscription' | 'equipment' | 'pendingConnection' | 'speedBonusWithRequest',\n globalId?: number | null,\n productId?: number | null,\n pricesV2?: {\n sort: number,\n type: number,\n duration: number | null,\n id: number,\n value: number,\n },\n category: 'routers' | 'decoders' | 'yandex-stanciya',\n shopItemId?: number,\n}\n\nexport interface ISpecOfferFeature {\n text: string,\n type: string,\n}\n\nexport interface ISpecOfferCost {\n full: number,\n withDiscount?: number,\n description?: string,\n firstPayment?: number,\n type: 'full' | 'month',\n}\n\nexport interface ISpecOfferLabel {\n text?: string,\n textColor: string,\n color: string,\n type:\n | 'timer'\n | 'label'\n | 'status'\n | 'new'\n | 'sale',\n}\n\nexport interface ISpecOfferChannel {\n id: number,\n title?: string,\n image?: string,\n themeId?: number,\n packageIds?: number[],\n}\n\nexport interface IAdvertising {\n companyName: string,\n erid: string,\n}\n\nexport enum EOfferState {\n CONNECTED = 1344,\n DECLINED = 1345,\n VIEWED = 1346,\n CREATED = 1347,\n NEW = 1348,\n DISCONNECTED = 1352,\n PENDING = 2267,\n}\n\nexport interface ISpecOfferBenefitBanner {\n title: string,\n lightThemeImage: ISpecOfferPicture,\n}\n\nexport interface ISpecOfferDetailItem {\n title: string,\n image: ISpecOfferPicture,\n}\n\nexport interface ISpecOfferDetails {\n title?: string,\n items: ISpecOfferDetailItem[],\n}\n\ninterface ISpecOfferPropertyItem {\n name: string,\n value: string,\n}\n\nexport interface ISpecOfferProperties {\n title: string,\n items: ISpecOfferPropertyItem[],\n}\n\nexport interface ISpecOffer {\n id: number,\n state: EOfferState,\n requestId: number,\n billingState: TPromoBillingState,\n paySum: number | null,\n reqStop: string,\n title: string,\n description: string,\n shortDescription: string,\n image?: ISpecOfferPicture,\n imageV2?: ISpecOfferPicture,\n backgroundImage?: ISpecOfferPicture,\n images: ISpecOfferPicture[],\n terms?: ISpecOfferTerm,\n childOffers: TPromoChildOffer[],\n backgroundColor: string,\n textColor: string | null,\n colorLabels: ISpecOfferLabel[],\n features?: ISpecOfferFeature[],\n cost?: ISpecOfferCost | null,\n navigation: ISpecOfferNavigation | null,\n benefits: ISpecOfferBenefit[],\n channels: ISpecOfferChannel[],\n advertising?: IAdvertising,\n hasInstantConnect?: boolean,\n buttonText?: string,\n benefitsV2?: ISpecOfferBenefitBanner[],\n details: ISpecOfferDetails,\n properties: ISpecOfferProperties,\n isShowNewDetail: boolean,\n}\n\nexport type TPromoChildOffer = Pick<\n ISpecOffer,\n | 'id'\n | 'title'\n | 'description'\n | 'features'\n | 'terms'\n | 'cost'\n | 'benefits'\n>;\n\nexport type TPromoBillingState =\n | 'created' // stepId -> 1352\n | 'new' // stepId -> 1348\n | 'viewed' // stepId -> 1346\n | 'pending' // stepId -> 2267\n | 'connected' // stepId -> 1344\n | 'disconnected' // stepId -> 1352\n | 'declined' // stepId -> 1345\n","import styled from 'styled-components';\n\nimport { COLORS } from '../../../tokens/colors';\nimport { getSizes, radioSizes, TControlDirection, TControlSize } from '../baseControlsData';\n\nconst getRadioSizes = (size: TControlSize) => getSizes(size, radioSizes);\n\ntype IStyleProps = {\n size: TControlSize,\n disabled: boolean,\n withLabel: boolean,\n direction: TControlDirection,\n}\n\nexport const Label = styled.label`\n display: flex;\n flex-direction: ${({ direction }) => direction === 'right' ? 'row-reverse' : 'row'};\n flex-wrap: nowrap;\n align-items: center;\n margin: 0;\n padding: 0;\n ${p => getRadioSizes(p.size).font};\n color: ${({ disabled }) => disabled ? COLORS.TextDisabled : COLORS.TextPrimary};\n user-select: none;\n\n input[type=\"radio\"] {\n position: relative;\n appearance: none;\n flex: 0 0 auto;\n width: ${p => getRadioSizes(p.size).inputSize}px;\n height: ${p => getRadioSizes(p.size).inputSize}px;\n margin: 0;\n margin-right: ${p => p.withLabel && p.direction !== 'right' ? getRadioSizes(p.size).rMargin + 'px' : 0 };\n margin-left: ${p => p.withLabel && p.direction === 'right' ? getRadioSizes(p.size).rMargin + 'px' : 0 };\n padding: 0;\n background-color: ${COLORS.BgMain};\n border-width: 2px;\n border-style: solid;\n border-color: ${COLORS.Brand_Blue};\n border-radius: 50%;\n transition: .3s;\n outline: none;\n box-sizing: border-box;\n cursor: pointer;\n align-self: flex-start;\n\n @media (hover: hover) {\n &:hover {\n border-color: ${COLORS.Link};\n }\n }\n\n &:required:invalid {\n border-color: ${COLORS.Error};\n background-color: ${COLORS.BgError};\n\n &:hover {\n border-color: ${COLORS.Link};\n background-color: ${COLORS.BgMain};\n }\n }\n\n &:disabled {\n border-color: ${COLORS.GRAY_LIGHT};\n background-color: ${COLORS.GRAY_LIGHT};\n cursor: default;\n pointer-events: none;\n\n @media (hover: hover) {\n &:hover {\n border-color: ${COLORS.GRAY_LIGHT};\n }\n }\n }\n\n &:checked {\n border-color: ${COLORS.Control};\n background-color: ${COLORS.Control};\n\n &:after {\n content: '';\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n transform-origin: center;\n width: ${p => getRadioSizes(p.size).radioCheckSize}px;\n height: ${p => getRadioSizes(p.size).radioCheckSize}px;\n border-radius: 50%;\n background-color: ${COLORS.BgMain};\n }\n\n @media (hover: hover) {\n &:hover {\n border-color: ${COLORS.Link};\n background-color: ${COLORS.Outline_Dark};\n }\n }\n\n &:disabled {\n border-color: ${COLORS.GRAY_DARK};\n background-color: ${COLORS.GRAY_DARK};\n pointer-events: none;\n\n &:after {\n background-color: ${COLORS.GRAY_LIGHT};\n }\n }\n }\n }\n`;\n","import React, { FC, useCallback } from 'react';\n\nimport { TControlDirection, TControlSize } from '../baseControlsData';\n\nimport { Label } from './styled';\n\nexport interface IRadioProps {\n size?: TControlSize,\n id?: string,\n name?: string,\n value?: string,\n checked?: boolean,\n disabled?: boolean,\n required?: boolean,\n onChange?: (value: string, event?: React.ChangeEvent) => void,\n className?: string,\n direction?: TControlDirection,\n [key: string]: unknown,\n}\n\nconst BaseRadio: FC = ({\n size = 'XS',\n id,\n name = '',\n value = '',\n checked,\n disabled = false,\n required,\n children,\n onChange,\n className,\n direction = 'left',\n ...props\n}) => {\n const onChangeHandler = useCallback((event: React.ChangeEvent) => {\n if (!disabled) {\n onChange && onChange(event.target.value, event);\n }\n }, [disabled, onChange]);\n\n return (\n \n \n {children}\n \n );\n};\n\nexport default BaseRadio;\n"],"names":["LOYALTY_PROGRAM_TERMS","on","off","getIsAbnLoyaltyProgramEnabled","getABNVariant","getTicketDataLayerLabel","countMonth","sumPrice","deltaPeriod","pluralize","monthPluralize","pushDataLayer","action","label","dataLayerPush","event","EVENTS","category","CATEGORIES","seasonTicketActivate","providerId","data","uri","method","withAuth","body","JSON","stringify","withProvider","amount","dispatch","getState","seasonTicket","cardId","activateDate","paySum","params","resp","isSuccess","title","text","setInProcess","city","provider","payment","seasonTicketPayment","id","email","autopay_act","payment_value","binding_id","payment_source","return_url","location","origin","doRequest","makePaymentWithBinding","RubleSymbol","toCurrency","ddmm","setTicketPopup","isOpen","step","type","EResultPopupStatus","isAuth","isSaveCard","result","requestParams","respData","auth","save_card_flag","makePaymentAuth","makePaymentUnauth","addCard","frameUrl","payload","payUrl","setPaymentResult","captureException","clientPersonal","agreement","userAgreement","linkResponse","codeResponse","setIsFetching","sbpInfo","toString","setQrFetchingResult","getQrLink","setQrLink","batch","getQrCode","setQrCode","state","currentPaySum","methodType","selectPaymentSum","payByBindedCard","payByNewCard","payBySbp","month","getPluralize","bonusesInfo","connectionResult","wholesaleCheaperData","flagId","isUseBonuses","bonusAmount","validity","currentFlag","length","setConnectionResult","EValidityStatus","pay","bonusValue","getClientPayment","setBonusesResult","Math","ceil","paySeasonTicket","payStatus","seasonTicketPaySum","selectSeasonTicketPaySum","cardPaymentSum","additionalText","bonusesAmount","bonusPluralize","processingPaymentText","info","loyalty","bonuses","currPaySum","floor","isValid","getValidity","setBonusesAmountValidity","qrLink","qrCode","setBonusesAmount","validateBonusesAmount","updatePaymentTypeId","EPaymentTypeIds","resetState","ticket","newPaySum","response","selectProviderId","setPaymentSumIsLoading","setSeasonTicket","setPaymentSumIsError","min","setIsUseBonuses","isAbnProgramTermsEnabled","selectCardPaySum","paymentData","bonusesValue","max","toFixed","selectedTicket","amountBonuses","paymentTypeId","cardMethods","isCardMethod","includes","addCardMethods","newCardMethods","currentMethods","methods","currentCardMethods","filter","setPaymentMethods","currentCardElementIndex","findIndex","prevElements","slice","afterElements","el","map","sort","join","newMethods","currentMethodsIds","noExistMethods","agreementId","isAutoPaySuccess","activateAutopayment","Number","isOpenPopup","getClientAll","additionalParams","paymentSum","isConnectAutoPay","popupOffer","connectAutopay","transaction","transactionSum","isTransactionPayed","selectOffer","deliveryRequestId","value","delivery_request_id","updateTransaction","payed","updateOffer","isPayCardSuccess","undefined","setBonusesValueValidity","availableBonuses","validationResult","setPaymentSumValidity","maxPaymentSum","MAX_PAYMENT","minPaymentSum","MIN_PAYMENT","getValidationStatus","validateBonusesValue","isTouchedBonusInput","togglePayWithBonusesStatus","notEditedBonusesValue","requiredBonusesToPay","trunc","calculateNotEditedBonusesValue","bonusesSum","fillBonusesValue","validatePaymentSum","getPaymentStatusAuth","orderId","queryParams","billing_transaction_id","getPaymentStatusUnAuth","order","actionParams","currentKey","getInfoByPaymentStatus","transactions","setTransactions","querySum","clientPayment","initializePaymentState","agreementEnc","autopayDay","autopay_day","_agreement","stateAgreement","agreement_enc","number_value","queryAgreement","index","splice","sbpData","removePaymentQrCode","isBonusesSuccess","sum","fillPaymentSum","selectNewOrViewedOffers","stopper","specialOfferAnalytics","push","actionType","toggleIsShowSpecOffer","setPaymentTypeId","availableFlags","SpecialOfferAnalytics","getLabel","offer","getGaLabelByNavigationType","view","this","send","viewOffersList","showPromoDetails","showAllPromo","instantConnect","connectWithPhone","successPhoneCheck","errorPhoneCheck","refillBalance","showOfferDetails","showOfferWithNewDesign","successConnected","successDisconnected","connectionError","BaseAnalytics","getDefaultCallback","DefaultCallback","billingStateMap","key","prefix","navigation","benefits","needPhoneBenefitIndex","benefit","needPhone","isCallbackDefined","callback","detailsDesignAbTest","new","current","isNewDetailsDesign","loadOffer","requestId","loadOffers","setSelectedOfferId","setIsPopupOpened","specOffers","force","offers","setIsLoadingOffers","isShowSpeedBonusesWithServiceEngineerVisit","copy","stepId","billingState","isLoading","isConnecting","setOffers","setOffer","updatedOffers","activate","specOfferId","reqBody","offerId","currentStep","isPopupOpened","isDisconnectingAction","currentStepId","EOfferState","setErrorMessage","error","message","setPopupState","setOfferTransaction","removeTransaction","viewOffer","withAnalytics","isShowNewDetail","campaignLayerPush","selectIsOfferTransactionPayed","createSelector","offerTransaction","some","stoppers","hasOtherOffers","selectedOfferId","find","dayjs","customParseFormat","months","hhmm","date","hh","String","getHours","padStart","mm","getMinutes","dateWithoutYear","toLocaleString","day","ddmmyyyy","getDate","getMonth","getFullYear","ddmmmmyyyy","isGenitive","withUTC","Date","dd","getUTCDate","mmmm","monthString","yyyy","Error","dateArr","split","parseInt","ddmmm","mmm","plain","getNameMonth","num","formatDate","indexOf","reverse","parseRusDate","string","matched","exec","trim","UTC","toISODateString","format","dateNextDay","count","now","setDate","addDays","days","dateTo","generateArrayOfYears","threshold","years","i","addMonths","dateValue","dayOfMonth","endOfDesiredMonth","setTime","getTime","setMonth","setFullYear","dateToLocaleRu","toLocaleDateString","daysDifinition","getDateDefinition","diffDay","toNumber","v","parseFloat","replace","x","s","d","c","n","pop","str","re","RegExp","accessToken","agreementNumber","setFetchClientPayment","getAgreementNumber","getInfoAll","setClientPayment","setErrorClientPayment","code","logout","categoryId","headers","scores","bindingCardId","requiredSum","payDay","agreement_id","pay_day","required_sum","encodeURIComponent","postParams","agreement_number","pay_amount","CONNECTED","DECLINED","VIEWED","CREATED","NEW","DISCONNECTED","PENDING","getRadioSizes","size","getSizes","radioSizes","Label","styled","direction","p","font","disabled","COLORS","inputSize","withLabel","rMargin","radioCheckSize","name","checked","required","children","onChange","className","props","onChangeHandler","useCallback","target","input"],"sourceRoot":""}