Some checks failed
CI / build-and-test (pull_request) Has been cancelled
- API: дата старта всегда YYYY-MM-DD; фронт: parseRaceDate без двойного T00:00:00 - GET /health с version из package.json; Vite define __FRONTEND_VERSION__ - Футер с версиями клиента/сервера (BEM), сетка app-shell на три ряда - AbortController для карточки старта; ретраи GET при 502–504 и понятные ошибки шлюза - Русские подписи навигации/страниц, lang=ru, без английских фраз в интерфейсе
39 lines
1.0 KiB
TypeScript
39 lines
1.0 KiB
TypeScript
import { useEffect, useState } from "react";
|
||
import { getHealth } from "../../api";
|
||
|
||
export function AppShellFooter(): JSX.Element {
|
||
const [backendVersion, setBackendVersion] = useState<string | null>(null);
|
||
|
||
useEffect(() => {
|
||
const ac = new AbortController();
|
||
void getHealth({ signal: ac.signal })
|
||
.then((h) => {
|
||
if (ac.signal.aborted) {
|
||
return;
|
||
}
|
||
setBackendVersion(h.version);
|
||
})
|
||
.catch(() => {
|
||
if (ac.signal.aborted) {
|
||
return;
|
||
}
|
||
setBackendVersion("недоступна");
|
||
});
|
||
return () => ac.abort();
|
||
}, []);
|
||
|
||
const backendLabel = backendVersion === null ? "…" : backendVersion;
|
||
|
||
return (
|
||
<footer className="app-shell__footer">
|
||
<p className="app-shell__footer-versions">
|
||
Версия клиента: {__FRONTEND_VERSION__}
|
||
<span className="app-shell__footer-sep" aria-hidden="true">
|
||
{" · "}
|
||
</span>
|
||
Версия сервера: {backendLabel}
|
||
</p>
|
||
</footer>
|
||
);
|
||
}
|