feat: in-app citizenship modal + referral approvals + bot DKS link

- Add CitizenshipModal component for in-app citizenship application
  (uses connected wallet keypair, no seed phrase needed)
- Replace /citizens redirect with in-app modal in Rewards section
- Add pending approvals to ReferralContext
- Add approveReferral and getPendingApprovals to citizenship lib
- Add applyingCitizenship/applicationSuccess translations (6 langs)
- Add DKS Kurdistan bot link to telegram-bot welcome message
This commit is contained in:
2026-03-02 00:48:35 +03:00
parent faf0faed69
commit abd4dc7189
12 changed files with 858 additions and 7 deletions
+8
View File
@@ -171,6 +171,12 @@ const ar: Translations = {
noUnclaimedRewards: 'لا توجد مكافآت غير مطالب بها',
rewardHistory: 'سجل المكافآت',
era: 'حقبة',
pendingApprovals: 'الموافقات المعلّقة',
approveReferral: 'موافقة',
approvingReferral: 'جاري الموافقة...',
referralApprovalSuccess: 'تمت الموافقة على الإحالة!',
referralApprovalFailed: 'فشلت الموافقة',
pendingReferralStatus: 'بانتظار موافقتك',
},
wallet: {
@@ -826,6 +832,8 @@ const ar: Translations = {
alreadyPending: 'لديك طلب قيد الانتظار',
alreadyApproved: 'مواطنتك معتمدة بالفعل!',
insufficientBalance: 'رصيد غير كافٍ (١ HEZ وديعة مطلوبة)',
applyingCitizenship: 'جاري تقديم طلب المواطنة...',
applicationSuccess: 'تم تقديم الطلب!',
selectLanguage: 'اختر اللغة',
},
};
+8
View File
@@ -172,6 +172,12 @@ const ckb: Translations = {
noUnclaimedRewards: 'خەڵاتی داوانەکراو نییە',
rewardHistory: 'مێژووی خەڵاتەکان',
era: 'سەردەم',
pendingApprovals: 'پەسەندکردنە چاوەڕوانەکان',
approveReferral: 'پەسەندکردن',
approvingReferral: 'پەسەند دەکرێت...',
referralApprovalSuccess: 'بانگهێشتکردن پەسەندکرا!',
referralApprovalFailed: 'پەسەندکردن سەرنەکەوت',
pendingReferralStatus: 'چاوەڕوانی پەسەندکردنی تۆیە',
},
wallet: {
@@ -829,6 +835,8 @@ const ckb: Translations = {
alreadyPending: 'داواکارییەکی چاوەڕوانت هەیە',
alreadyApproved: 'هاوڵاتیبوونت پێشتر پەسەند کراوە!',
insufficientBalance: 'باڵانسی پێویست نییە (١ HEZ ئەمانەت پێویستە)',
applyingCitizenship: 'داواکاری هاوڵاتیبوون دەنێردرێت...',
applicationSuccess: 'داواکاری نێردرا!',
selectLanguage: 'زمان هەڵبژێرە',
},
};
+8
View File
@@ -171,6 +171,12 @@ const en: Translations = {
noUnclaimedRewards: 'No unclaimed rewards',
rewardHistory: 'Reward History',
era: 'Era',
pendingApprovals: 'Pending Approvals',
approveReferral: 'Approve',
approvingReferral: 'Approving...',
referralApprovalSuccess: 'Referral approved!',
referralApprovalFailed: 'Approval failed',
pendingReferralStatus: 'Awaiting your approval',
},
wallet: {
@@ -829,6 +835,8 @@ const en: Translations = {
alreadyPending: 'You already have a pending application',
alreadyApproved: 'Your citizenship is already approved!',
insufficientBalance: 'Insufficient balance (1 HEZ deposit required)',
applyingCitizenship: 'Applying for citizenship...',
applicationSuccess: 'Application submitted!',
selectLanguage: 'Select language',
},
};
+8
View File
@@ -171,6 +171,12 @@ const fa: Translations = {
noUnclaimedRewards: 'پاداش مطالبه نشده‌ای وجود ندارد',
rewardHistory: 'تاریخچه پاداش‌ها',
era: 'دوره',
pendingApprovals: 'تأییدهای در انتظار',
approveReferral: 'تأیید',
approvingReferral: 'در حال تأیید...',
referralApprovalSuccess: 'دعوت تأیید شد!',
referralApprovalFailed: 'تأیید ناموفق بود',
pendingReferralStatus: 'در انتظار تأیید شما',
},
wallet: {
@@ -829,6 +835,8 @@ const fa: Translations = {
alreadyPending: 'درخواست در انتظار دارید',
alreadyApproved: 'شهروندی شما قبلاً تأیید شده!',
insufficientBalance: 'موجودی ناکافی (۱ HEZ سپرده لازم است)',
applyingCitizenship: 'در حال ارسال درخواست شهروندی...',
applicationSuccess: 'درخواست ارسال شد!',
selectLanguage: 'انتخاب زبان',
},
};
+8
View File
@@ -176,6 +176,12 @@ const krd: Translations = {
noUnclaimedRewards: 'Xelatên nedaxwazkir tune ne',
rewardHistory: 'Dîroka Xelatan',
era: 'Era',
pendingApprovals: 'Pejirandina li bendê',
approveReferral: 'Pejirîne',
approvingReferral: 'Tê pejirandin...',
referralApprovalSuccess: 'Referans hat pejirandin!',
referralApprovalFailed: 'Pejirandin biserneket',
pendingReferralStatus: 'Li benda pejirandina we',
},
wallet: {
@@ -856,6 +862,8 @@ const krd: Translations = {
alreadyPending: 'Serlêdanek te ya li bendê heye',
alreadyApproved: 'Welatîbûna te berê hatiye pejirandin!',
insufficientBalance: 'Balansa têr nîne (1 HEZ depozîto pêwîst e)',
applyingCitizenship: 'Daxwaza welatîbûnê tê şandin...',
applicationSuccess: 'Daxwaz hat şandin!',
selectLanguage: 'Ziman hilbijêre',
},
};
+8
View File
@@ -171,6 +171,12 @@ const tr: Translations = {
noUnclaimedRewards: 'Talep edilmemiş ödül yok',
rewardHistory: 'Ödül Geçmişi',
era: 'Era',
pendingApprovals: 'Bekleyen Onaylar',
approveReferral: 'Onayla',
approvingReferral: 'Onaylanıyor...',
referralApprovalSuccess: 'Referans onaylandı!',
referralApprovalFailed: 'Onaylama başarısız',
pendingReferralStatus: 'Onayınızı bekliyor',
},
wallet: {
@@ -829,6 +835,8 @@ const tr: Translations = {
alreadyPending: 'Bekleyen bir başvurunuz var',
alreadyApproved: 'Vatandaşlığınız zaten onaylanmış!',
insufficientBalance: 'Yetersiz bakiye (1 HEZ depozito gerekli)',
applyingCitizenship: 'Vatandaşlık başvurusu yapılıyor...',
applicationSuccess: 'Başvuru gönderildi!',
selectLanguage: 'Dil seçin',
},
};
+9
View File
@@ -173,6 +173,12 @@ export interface Translations {
noUnclaimedRewards: string;
rewardHistory: string;
era: string;
pendingApprovals: string;
approveReferral: string;
approvingReferral: string;
referralApprovalSuccess: string;
referralApprovalFailed: string;
pendingReferralStatus: string;
};
// Wallet section
@@ -851,6 +857,9 @@ export interface Translations {
alreadyPending: string;
alreadyApproved: string;
insufficientBalance: string;
// In-app modal
applyingCitizenship: string;
applicationSuccess: string;
// Language selector
selectLanguage: string;
};