feat: gift subscription redesign — code-only purchase + 3-tab UI

- Remove recipient input from buy flow (code-only gifts)
- 3-tab UI: Buy, Activate, My Gifts with animations
- After purchase, switch to My Gifts tab to show gift code
- Gift code display with copy/share buttons
- Activate tab: enter gift code to activate subscription
- My Gifts tab: sent/received gifts with status badges
- Fix: use navigator.language instead of hardcoded ru-RU for dates
- Fix: spread array before sort to prevent React Query cache mutation
- Fix: ARIA tab linkage with proper id/aria-labelledby
- Fix: guard VITE_BOT_USERNAME against undefined in share URLs
- Fix: wrap clipboard/share fallbacks in try/catch
- Add error state to MyGiftsTabContent
This commit is contained in:
Fringg
2026-03-10 05:37:18 +03:00
parent d946c83357
commit af3e535c69
4 changed files with 1018 additions and 560 deletions

View File

@@ -4201,6 +4201,41 @@
},
"warning": {
"telegram_unresolvable": "Could not verify this Telegram username. The recipient may not receive a notification about the gift."
}
},
"pageTitle": "Gifts",
"tabBuy": "Buy",
"tabActivate": "Activate",
"tabMyGifts": "My Gifts",
"selectTariff": "SELECT TARIFF",
"selectPeriod": "SUBSCRIPTION PERIOD",
"deviceCount": "{{count}} device",
"deviceCount_other": "{{count}} devices",
"activateTitle": "Enter gift code",
"activateDescription": "Enter the gift code you received from a friend",
"activateCodePlaceholder": "GIFT-XXXXXXXXXXXX",
"activateButton": "Activate gift",
"activating": "Activating...",
"activateSuccess": "Gift activated!",
"activateSuccessDesc": "{{tariff}} — {{days}} days added to your subscription",
"activateError": "Failed to activate gift",
"myGiftsEmpty": "No gifts yet",
"myGiftsEmptyDesc": "Buy a gift for a friend or activate a received code",
"sentGiftsTitle": "Sent",
"receivedGiftsTitle": "Received",
"statusAvailable": "AVAILABLE",
"statusActivated": "ACTIVATED",
"statusPending": "PENDING",
"statusDelivered": "DELIVERED",
"statusFailed": "FAILED",
"statusExpired": "EXPIRED",
"statusPendingActivation": "PENDING ACTIVATION",
"copyCode": "COPY",
"codeCopied": "Code copied!",
"shareGift": "SHARE",
"shareText": "I have a gift for you! Activate it here:",
"activatedBy": "Activated by {{username}}",
"sentTo": "Sent to {{recipient}}",
"daysShort": "days",
"devicesShort": "dev."
}
}