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

@@ -133,6 +133,12 @@ export interface ChannelSubscriptionError {
code: 'channel_subscription_required';
message: string;
channel_link?: string;
channels?: Array<{
channel_id: string;
channel_link?: string;
title?: string;
is_subscribed: boolean;
}>;
}
export interface BlacklistedError {
@@ -189,6 +195,7 @@ apiClient.interceptors.response.use(
useBlockingStore.getState().setChannelSubscription({
message: detail.message,
channel_link: detail.channel_link,
channels: detail.channels,
});
return Promise.reject(error);
}