feat: color-code referral network nodes by subscription status

Add subscription status colors: green (paid active), blue (trial active),
red (paid expired), orange (trial expired). Extract NODE_COLORS constant
as single source of truth. Add SubscriptionStatus union type. Show status
badge in user detail panel. Add i18n for all 4 locales.
This commit is contained in:
Fringg
2026-03-22 09:07:32 +03:00
parent 8e59af96c5
commit b289ea9c23
9 changed files with 134 additions and 22 deletions

View File

@@ -1257,7 +1257,11 @@
"topReferrer": "Top referrer (10+)",
"campaignUser": "From campaign",
"partnerCampaignEdge": "Partner → Campaign",
"campaignNode": "Ad campaign"
"campaignNode": "Ad campaign",
"paidActive": "Paid subscription",
"trialActive": "Trial",
"paidExpired": "Paid expired",
"trialExpired": "Trial expired"
},
"user": {
"tgId": "TG ID",
@@ -1276,7 +1280,13 @@
"source": "Source",
"referredBy": "Referred by",
"fromCampaign": "Campaign",
"organic": "Organic"
"organic": "Organic",
"subscriptionStatus": {
"trial_active": "Trial",
"paid_active": "Paid",
"trial_expired": "Trial expired",
"paid_expired": "Paid expired"
}
},
"campaign": {
"startParam": "Parameter",

View File

@@ -1091,7 +1091,11 @@
"topReferrer": "ارجاع‌دهنده برتر (+۱۰)",
"campaignUser": "از کمپین",
"partnerCampaignEdge": "شریک → کمپین",
"campaignNode": "کمپین تبلیغاتی"
"campaignNode": "کمپین تبلیغاتی",
"paidActive": "اشتراک پرداختی",
"trialActive": "آزمایشی",
"paidExpired": "اشتراک پرداختی منقضی",
"trialExpired": "آزمایشی منقضی"
},
"user": {
"tgId": "شناسه TG",
@@ -1110,7 +1114,13 @@
"source": "منبع",
"referredBy": "معرفی شده توسط",
"fromCampaign": "کمپین",
"organic": "طبیعی"
"organic": "طبیعی",
"subscriptionStatus": {
"trial_active": "آزمایشی",
"paid_active": "پرداختی",
"trial_expired": "آزمایشی منقضی",
"paid_expired": "پرداختی منقضی"
}
},
"campaign": {
"startParam": "پارامتر",

View File

@@ -1278,7 +1278,11 @@
"topReferrer": "Топ-реферер (10+)",
"campaignUser": "Из кампании",
"partnerCampaignEdge": "Партнёр → РК",
"campaignNode": "Рекламная кампания"
"campaignNode": "Рекламная кампания",
"paidActive": "Платная подписка",
"trialActive": "Триал",
"paidExpired": "Платная истекла",
"trialExpired": "Триал истёк"
},
"user": {
"tgId": "TG ID",
@@ -1297,7 +1301,13 @@
"source": "Источник",
"referredBy": "Пришёл от",
"fromCampaign": "РК",
"organic": "Органический"
"organic": "Органический",
"subscriptionStatus": {
"trial_active": "Триал",
"paid_active": "Платная",
"trial_expired": "Триал истёк",
"paid_expired": "Платная истекла"
}
},
"campaign": {
"startParam": "Параметр",

View File

@@ -1091,7 +1091,11 @@
"topReferrer": "顶级推荐人 (10+)",
"campaignUser": "来自活动",
"partnerCampaignEdge": "合作伙伴 → 活动",
"campaignNode": "广告活动"
"campaignNode": "广告活动",
"paidActive": "付费订阅",
"trialActive": "试用",
"paidExpired": "付费已过期",
"trialExpired": "试用已过期"
},
"user": {
"tgId": "TG ID",
@@ -1110,7 +1114,13 @@
"source": "来源",
"referredBy": "由...推荐",
"fromCampaign": "活动",
"organic": "自然流量"
"organic": "自然流量",
"subscriptionStatus": {
"trial_active": "试用",
"paid_active": "付费",
"trial_expired": "试用已过期",
"paid_expired": "付费已过期"
}
},
"campaign": {
"startParam": "参数",