feat: add multi-channel subscription blocking UI and admin management

- Channel subscription blocking screen with per-channel status display
- Safe URL handling with protocol validation (no open redirect)
- Race-condition-safe subscription check with useRef guard
- Admin channel management page with create, toggle, delete
- Error handlers on all admin mutations with haptic feedback
- Proper type guard for channel subscription error detection
- Accessibility: aria-labels on icon-only buttons
- Localization: en, ru, zh, fa translations
This commit is contained in:
Fringg
2026-02-24 02:50:52 +03:00
parent 8ea9a1d6a0
commit a767fe96d3
12 changed files with 758 additions and 113 deletions

View File

@@ -861,7 +861,8 @@
"updates": "Updates",
"pinnedMessages": "Pinned Messages",
"partners": "Partners",
"withdrawals": "Withdrawals"
"withdrawals": "Withdrawals",
"channelSubscriptions": "Required Channels"
},
"panel": {
"title": "Admin Panel",
@@ -888,7 +889,8 @@
"updatesDesc": "Bot & cabinet versions",
"pinnedMessagesDesc": "Manage pinned messages for users",
"partnersDesc": "Manage partner applications and commissions",
"withdrawalsDesc": "Review and process withdrawal requests"
"withdrawalsDesc": "Review and process withdrawal requests",
"channelSubscriptionsDesc": "Manage required channel subscriptions"
},
"trafficUsage": {
"title": "Traffic Usage",
@@ -1297,6 +1299,28 @@
"editMessage": "Edit",
"cantDeleteActive": "Cannot delete active message"
},
"channelSubscriptions": {
"title": "Required Channels",
"subtitle": "Users must subscribe to these channels",
"addChannel": "Add Channel",
"empty": "No channels configured",
"enabled": "Enabled",
"disabled": "Disabled",
"enable": "Enable",
"disable": "Disable",
"delete": "Delete",
"deleteConfirm": "Delete this channel?",
"sortOrder": "Order",
"form": {
"title": "Display Name",
"channelId": "Channel ID",
"channelIdHint": "@username or -100XXXXXXXXXX",
"channelLink": "Channel Link",
"channelLinkHint": "https://t.me/channel",
"submit": "Add",
"cancel": "Cancel"
}
},
"settings": {
"title": "System Settings",
"allCategories": "All categories",
@@ -3144,7 +3168,9 @@
"waitSeconds": "Wait {{seconds}} sec.",
"hint": "Click check button after subscribing",
"notSubscribed": "You haven't subscribed to the channel yet",
"checkError": "Check failed. Please try again later."
"checkError": "Check failed. Please try again later.",
"subscribed": "Subscribed",
"channelsRequired": "Subscribe to all channels below to continue"
},
"blacklisted": {
"title": "Access Denied",