feat: version banner UI + GET /api/v1/version backend endpoint
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
import { useAppVersion } from './useAppVersion'
|
||||
|
||||
/**
|
||||
* Subtle version indicator в header. Показывает client version + short commit.
|
||||
*
|
||||
* <p>Hover/title attribute exposes полную идентификацию (server tag, build time).
|
||||
* Используется как secondary affordance для эксплуатационной диагностики
|
||||
* (юзер скриншотит badge в bug report → ops знает точную сборку).
|
||||
*
|
||||
* <p>Если update available — badge подсвечивается dot indicator. Banner делает
|
||||
* primary CTA, badge — passive signal.
|
||||
*/
|
||||
export function VersionBadge() {
|
||||
const {
|
||||
clientVersion,
|
||||
clientCommit,
|
||||
clientBuiltAt,
|
||||
serverVersion,
|
||||
serverCommit,
|
||||
serverTag,
|
||||
updateAvailable,
|
||||
} = useAppVersion()
|
||||
|
||||
const tooltip = [
|
||||
`client: ${clientVersion} (${clientCommit})`,
|
||||
`server: ${serverTag || serverVersion} (${serverCommit ?? '...'})`,
|
||||
`built: ${clientBuiltAt}`,
|
||||
].join('\n')
|
||||
|
||||
return (
|
||||
<span
|
||||
className="inline-flex items-center gap-1.5 text-xs text-carbon/60 font-mono select-none"
|
||||
title={tooltip}
|
||||
>
|
||||
{updateAvailable && (
|
||||
<span
|
||||
aria-label="Доступна новая версия"
|
||||
className="inline-block w-1.5 h-1.5 rounded-full bg-ultramarain animate-pulse"
|
||||
/>
|
||||
)}
|
||||
<span>v{clientVersion}</span>
|
||||
<span className="text-carbon/40">·</span>
|
||||
<span>{clientCommit.substring(0, 7)}</span>
|
||||
</span>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user