diff --git a/ordinis-admin-ui/src/components/reviews/MyDraftsPanel.tsx b/ordinis-admin-ui/src/components/reviews/MyDraftsPanel.tsx index 3708a22..6109647 100644 --- a/ordinis-admin-ui/src/components/reviews/MyDraftsPanel.tsx +++ b/ordinis-admin-ui/src/components/reviews/MyDraftsPanel.tsx @@ -1,6 +1,7 @@ import { useMemo, useState } from 'react' import { Link } from '@tanstack/react-router' import { useTranslation } from 'react-i18next' +import { useAuth } from 'react-oidc-context' import { Badge, Button, @@ -103,10 +104,34 @@ const operationVariant = (op: DraftOperation): 'info' | 'success' | 'warning' => export function MyDraftsPanel({ onRecordClick }: Props) { const { t } = useTranslation() + const auth = useAuth() + // Anonymous: backend /drafts/me + /admin/schema-drafts/me либо 401, либо + // empty list (зависит от auth.required gate). Раньше это упиралось в + // generic "У вас пока нет черновиков" — misleading: пользователь не + // понимал что нужно sign in. Теперь dedicated empty state с CTA. const recordsQ = useMyDrafts(0, 50) const schemasQ = useMySchemaDrafts(0, 50) const [filter, setFilter] = useState('all') + if (!auth.isAuthenticated) { + return ( + auth.signinRedirect()}> + {t('auth.login', { defaultValue: 'Войти' })} + + } + /> + ) + } + const rows: UnifiedRow[] = useMemo(() => { const records: UnifiedRow[] = (recordsQ.data?.items ?? []).map((r) => ({ kind: 'record', diff --git a/ordinis-admin-ui/src/i18n.ts b/ordinis-admin-ui/src/i18n.ts index 948cb40..d9a2b30 100644 --- a/ordinis-admin-ui/src/i18n.ts +++ b/ordinis-admin-ui/src/i18n.ts @@ -614,6 +614,9 @@ i18n 'reviews.mine.emptyDescription': 'Черновики появятся здесь, когда вы отправите изменения записи или схемы на ревью.', 'reviews.mine.emptyFilter': 'В этой категории черновиков нет', + 'reviews.mine.anonTitle': 'Войдите чтобы видеть свои черновики', + 'reviews.mine.anonDescription': + 'Собственные drafts видны только после авторизации — backend фильтрует по вашему JWT sub claim. Войдите через Keycloak чтобы открыть Мои.', 'reviews.mine.filter.all': 'Все', 'reviews.mine.filter.pending': 'На ревью', 'reviews.mine.filter.wip': 'В работе', @@ -1371,6 +1374,9 @@ i18n 'reviews.mine.empty': 'You have no drafts yet', 'reviews.mine.emptyDescription': 'Drafts will appear here when you submit record or schema changes for review.', + 'reviews.mine.anonTitle': 'Sign in to see your drafts', + 'reviews.mine.anonDescription': + 'Your own drafts are visible only after sign-in — backend filters by your JWT sub claim. Sign in via Keycloak to open Mine.', 'reviews.mine.emptyFilter': 'No drafts in this category', 'reviews.mine.filter.all': 'All', 'reviews.mine.filter.pending': 'Under review',