@@ -14,6 +14,7 @@ export const SubscriptionChangeNotificationPlate = () => { const fromTokens = modal.getStoreProperty('fromTokens') ?? 0 const toTokens = modal.getStoreProperty('toTokens') ?? 0 const isUpgrade = modal.getStoreProperty('isUpgrade') ?? false + const tokensToAdd = modal.getStoreProperty('tokensToAdd') const handleClose = () => { modal.setState(false) @@ -29,15 +30,36 @@ export const SubscriptionChangeNotificationPlate = () => {
e.stopPropagation()}>

Смена подписки

- {!isUpgrade ?

- Внимание! Вы собираетесь перейти с подписки{' '} - {formatTokens(fromTokens)} токенов на подписку{' '} - {formatTokens(toTokens)} токенов. -
- Уведомляем Вас, что при смене подписки сгорают все неиспользованные в прежней подписке токены. Продолжить? -

:

- Уведомляем вас, что при смене подписки часть токенов сверх лимита текущей подписки сгорит и не перенесётся на новый план. Продолжить? -

} + {tokensToAdd != null ? ( +

+ {fromTokens === toTokens ? ( + <> + При балансе{' '} + {formatTokens(toTokens - tokensToAdd)} токенов + {' '}вы докупите ещё{' '} + {formatTokens(tokensToAdd)} токенов. Продолжить? + + ) : ( + <> + Вы докупите{' '} + {formatTokens(tokensToAdd)} токенов + {' '}(лимит плана {formatTokens(toTokens)} − баланс {formatTokens(toTokens - tokensToAdd)} = {formatTokens(tokensToAdd)}). Продолжить? + + )} +

+ ) : !isUpgrade ? ( +

+ Внимание! Вы собираетесь перейти с подписки{' '} + {formatTokens(fromTokens)} токенов на подписку{' '} + {formatTokens(toTokens)} токенов. +
+ Уведомляем Вас, что при смене подписки сгорают все неиспользованные в прежней подписке токены. Продолжить? +

+ ) : ( +

+ Уведомляем вас, что при смене подписки часть токенов сверх лимита текущей подписки сгорит и не перенесётся на новый план. Продолжить? +

+ )}
@@ -70,6 +70,8 @@ const Offer: React.FC = ({ uid, tokens_per_plan, price, grouped_fea const isUpgrade = currentPlanTokens < toTokens const isDowngrade = currentPlanTokens > toTokens const balanceExceedsLimit = balance > currentPlanTokens + const isSamePlan = currentPlanTokens === toTokens + const handlePayClick = () => { @@ -100,6 +102,34 @@ const Offer: React.FC = ({ uid, tokens_per_plan, price, grouped_fea return } + // Апгрейд без токенов сверх лимита: показываем сколько токенов докупит юзер + if (isUpgrade && !balanceExceedsLimit) { + const tokensToAdd = toTokens - balance + modal.setState(true, { + fromTokens: currentPlanTokens, + toTokens, + tokensToAdd, + onConfirm: () => pay(uid), + }) + return + } + + // Рекуррентный юзер покупает тот же план: показываем сколько токенов докупит (если есть что докупать) + if (isSamePlan) { + const tokensToAdd = toTokens - balance + if (tokensToAdd > 0) { + modal.setState(true, { + fromTokens: currentPlanTokens, + toTokens, + tokensToAdd, + onConfirm: () => pay(uid), + }) + return + } + pay(uid) + return + } + // Даунгрейд: модалка всегда (неиспользованные токены сгорят) if (isDowngrade) { modal.setState(true, {