From 38f7dcee3ec7ba645ecbbaa8e278fb060f2b7c6c Mon Sep 17 00:00:00 2001 From: "Zimin A.N." Date: Mon, 11 May 2026 19:55:52 +0300 Subject: [PATCH] fix(topbar): restore full right cluster per user preference MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User explicitly: "Руководство · dev · 19a3731b · ☀️🌙🖥 · RU EN · zimin.an · ↩ это оставь". Revert MR !81 cluster-minimization — diagnostic info нужна для prod debugging. Restored: - Docs link (/docs/) — opens admin docs portal - VersionBadge (channel + commit short SHA) — shows local/dev/v1.x.x · hash - LanguageSwitch (dual RU | EN radio) — keeps both visible vs single-toggle - (ThemeSwitch + AuthBadge остаются как были) --- .../src/components/layout/TopBar.tsx | 57 +++++++++---------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/ordinis-admin-ui/src/components/layout/TopBar.tsx b/ordinis-admin-ui/src/components/layout/TopBar.tsx index 7a2f3ef..4bfabb2 100644 --- a/ordinis-admin-ui/src/components/layout/TopBar.tsx +++ b/ordinis-admin-ui/src/components/layout/TopBar.tsx @@ -1,12 +1,19 @@ import { useTranslation } from 'react-i18next' import { Link, useLocation, useNavigate } from '@tanstack/react-router' import { useDictionaryDetail } from '@/api/queries' +import { LanguageSwitch } from '@/ui' import { AuthBadge } from '@/auth/AuthBadge' import { ThemeSwitch } from '@/components/layout/ThemeSwitch' +import { VersionBadge } from '@/components/version/VersionBadge' import { SearchInput } from '@/ui/components/search-input' import { Menu } from 'lucide-react' import { useEffect, useRef, useState } from 'react' +const LANG_OPTIONS = [ + { id: 'ru-RU', label: 'RU' }, + { id: 'en-US', label: 'EN' }, +] + /** * TopBar — sticky header (h=56) per handoff design. * @@ -17,7 +24,7 @@ import { useEffect, useRef, useState } from 'react' * - Right: VersionBadge · ThemeSwitch · LanguageSwitch · Docs · AuthBadge */ export function TopBar({ onMenuClick }: { onMenuClick?: () => void }) { - const { t } = useTranslation() + const { t, i18n } = useTranslation() const navigate = useNavigate() const [searchValue, setSearchValue] = useState('') const inputRef = useRef(null) @@ -115,42 +122,34 @@ export function TopBar({ onMenuClick }: { onMenuClick?: () => void }) { /> - {/* Right cluster — minimal per redesign prototype: - * - Lang toggle (single label, click flips) - * - Theme switch (Earth / Dark) - * - AuthBadge (sign-in / user avatar) - * Docs link и VersionBadge перенесены в sidebar footer — diagnostic info, - * не critical UX. */} + {/* Right cluster — user prefers full set: Docs link + VersionBadge + + * ThemeSwitch + LanguageSwitch + AuthBadge (logged-in avatar/sign-in). + * User explicitly: "Руководство · dev · {commit} · theme · RU EN · + * zimin.an · logout это оставь". */}
- + + {t('nav.docs')} + + + + + i18n.changeLanguage(id)} + />
) } -/** - * LanguageToggle — single-button toggle per redesign prototype (показывает - * текущий язык как label, click переключает на следующий). Замена tri/dual - * radio LanguageSwitch который занимал ~80px горизонтально. - */ -function LanguageToggle() { - const { i18n } = useTranslation() - const cur = i18n.language?.toLowerCase().startsWith('en') ? 'en' : 'ru' - const next = cur === 'ru' ? 'en-US' : 'ru-RU' - return ( - - ) -} - type Crumb = { label: string; to?: string; subtitle?: string } /**