- Карточки "Бонус новому пользователю" и "Бонус пригласившему"

скрыты когда значение = 0
- Динамический grid-cols в зависимости от количества видимых карточек
- Добавлено поле max_commission_payments в тип ReferralTerms
- Уведомления бота: строки с бонусом нового пользователя и бонусом
    пригласившего скрываются если соответствующие настройки = 0
- Раздел "Как работают награды": карточки бонусов скрыты при значении 0
- Invite message: строка про бонус за первое пополнение скрыта при 0
- Текст комиссии: "с каждого пополнения" при без лимита,
    "с пополнений" при наличии REFERRAL_MAX_COMMISSION_PAYMENTS- API /terms: добавлено поле max_commission_payments
- Добавлен ключ локали REFERRAL_REWARD_COMMISSION_LIMITED (ru/en/ua/zh/fa)
This commit is contained in:
firewookie
2026-03-06 11:08:52 +05:00
parent 8063ec5014
commit fd84df0020
2 changed files with 49 additions and 29 deletions

View File

@@ -302,37 +302,56 @@ export default function Referral() {
</div> </div>
{/* Program Terms */} {/* Program Terms */}
{terms && ( {terms &&
<div className="bento-card"> (() => {
<h2 className="mb-4 text-lg font-semibold text-dark-100">{t('referral.terms.title')}</h2> const showNewUserBonus = terms.first_topup_bonus_kopeks > 0;
<div className="grid grid-cols-2 gap-4 md:grid-cols-4"> const showInviterBonus = terms.inviter_bonus_kopeks > 0;
<div className="rounded-xl bg-dark-800/30 p-3"> const cardCount = 2 + (showNewUserBonus ? 1 : 0) + (showInviterBonus ? 1 : 0);
<div className="text-sm text-dark-500">{t('referral.terms.commission')}</div> const gridCols =
<div className="mt-1 text-lg font-semibold text-dark-100"> cardCount <= 2
{terms.commission_percent}% ? 'md:grid-cols-2'
: cardCount === 3
? 'md:grid-cols-3'
: 'md:grid-cols-4';
return (
<div className="bento-card">
<h2 className="mb-4 text-lg font-semibold text-dark-100">
{t('referral.terms.title')}
</h2>
<div className={`grid grid-cols-2 gap-4 ${gridCols}`}>
<div className="rounded-xl bg-dark-800/30 p-3">
<div className="text-sm text-dark-500">{t('referral.terms.commission')}</div>
<div className="mt-1 text-lg font-semibold text-dark-100">
{terms.commission_percent}%
</div>
</div>
<div className="rounded-xl bg-dark-800/30 p-3">
<div className="text-sm text-dark-500">{t('referral.terms.minTopup')}</div>
<div className="mt-1 text-lg font-semibold text-dark-100">
{formatAmount(terms.minimum_topup_rubles)} {currencySymbol}
</div>
</div>
{showNewUserBonus && (
<div className="rounded-xl bg-dark-800/30 p-3">
<div className="text-sm text-dark-500">{t('referral.terms.newUserBonus')}</div>
<div className="mt-1 text-lg font-semibold text-success-400">
{formatPositive(terms.first_topup_bonus_rubles)}
</div>
</div>
)}
{showInviterBonus && (
<div className="rounded-xl bg-dark-800/30 p-3">
<div className="text-sm text-dark-500">{t('referral.terms.inviterBonus')}</div>
<div className="mt-1 text-lg font-semibold text-success-400">
{formatPositive(terms.inviter_bonus_rubles)}
</div>
</div>
)}
</div> </div>
</div> </div>
<div className="rounded-xl bg-dark-800/30 p-3"> );
<div className="text-sm text-dark-500">{t('referral.terms.minTopup')}</div> })()}
<div className="mt-1 text-lg font-semibold text-dark-100">
{formatAmount(terms.minimum_topup_rubles)} {currencySymbol}
</div>
</div>
<div className="rounded-xl bg-dark-800/30 p-3">
<div className="text-sm text-dark-500">{t('referral.terms.newUserBonus')}</div>
<div className="mt-1 text-lg font-semibold text-success-400">
{formatPositive(terms.first_topup_bonus_rubles)}
</div>
</div>
<div className="rounded-xl bg-dark-800/30 p-3">
<div className="text-sm text-dark-500">{t('referral.terms.inviterBonus')}</div>
<div className="mt-1 text-lg font-semibold text-success-400">
{formatPositive(terms.inviter_bonus_rubles)}
</div>
</div>
</div>
</div>
)}
{/* Referrals List */} {/* Referrals List */}
<div className="bento-card"> <div className="bento-card">

View File

@@ -437,6 +437,7 @@ export interface ReferralTerms {
first_topup_bonus_rubles: number; first_topup_bonus_rubles: number;
inviter_bonus_kopeks: number; inviter_bonus_kopeks: number;
inviter_bonus_rubles: number; inviter_bonus_rubles: number;
max_commission_payments: number;
partner_section_visible?: boolean; partner_section_visible?: boolean;
} }