From f8480b06ae6cdb7ec5ffea089a3591a82a6e5532 Mon Sep 17 00:00:00 2001 From: nns Date: Mon, 5 Oct 2026 00:32:41 +0500 Subject: [PATCH] =?UTF-8?q?fix(hotfix):=20TelegramSection=20=E2=80=94=20ga?= =?UTF-8?q?te=20GET=20/api/organization/telegram/status=20=D0=BD=D0=B0=20a?= =?UTF-8?q?dvancedMode?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Пропустил в первом коммите: OrganizationSettingsPage в простом режиме дёргал /api/organization/telegram/status, который [RequiresAdvancedMode]. Токсичный тост силен silent-GET-403 политикой (api.ts), но menu-walk e2e всё равно ловил 4 сетевых 403 для demo-admin → fail. Чиним у источника: не фетчим если not advanced. Co-Authored-By: Claude Opus 4.7 --- src/food-market.web/src/pages/OrganizationSettingsPage.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/food-market.web/src/pages/OrganizationSettingsPage.tsx b/src/food-market.web/src/pages/OrganizationSettingsPage.tsx index 9a6fbcc..22f6f0a 100644 --- a/src/food-market.web/src/pages/OrganizationSettingsPage.tsx +++ b/src/food-market.web/src/pages/OrganizationSettingsPage.tsx @@ -8,6 +8,7 @@ import { Field, TextInput, Select, Checkbox } from '@/components/Field' import { FormSkeleton } from '@/components/Skeleton' import { useCountries } from '@/lib/useLookups' import { useOrgSettings, type OrgSettings } from '@/lib/useOrgSettings' +import { useMe } from '@/lib/useMe' interface DemoSeedSummary { alreadySeeded: boolean @@ -228,10 +229,16 @@ interface TelegramStatus { */ function TelegramSection() { const qc = useQueryClient() + // Hotfix: Telegram-binding — advanced-only (RequiresAdvancedMode). + // В простом режиме не фетчим — иначе 403 на reload настроек org. + const me = useMe() + const isAdvanced = !!me.data?.advancedMode || !!me.data?.roles?.includes('SuperAdmin') const status = useQuery({ queryKey: ['/api/organization/telegram/status'], queryFn: async () => (await api.get('/api/organization/telegram/status')).data, + enabled: isAdvanced, }) + if (!isAdvanced) return null const [chatIdInput, setChatIdInput] = useState('') const bind = useMutation({ mutationFn: async () => {