import React, { useCallback, useEffect, useRef, useState } from 'react'; import { Button } from 'react-bootstrap'; import { useAuth } from './context/auth'; import { login } from '../../types'; import { useAppConfig } from './hooks/useGroupLimits'; import './Login.css'; /** * Přihlášení. Podle konfigurace serveru buď přihlásí uživatele automaticky přes důvěryhodné * hlavičky z proxy (bez formuláře), nebo zobrazí formulář pro zadání jména. Když se konfigurace * nenačte, zkusí nejprve přihlášení „naprázdno" a jinak zobrazí formulář (původní chování). */ export default function Login() { const auth = useAuth(); const { loaded, trustedHeaders } = useAppConfig(); const loginRef = useRef(null); const [trustedError, setTrustedError] = useState(); const [attempt, setAttempt] = useState(0); useEffect(() => { if (!auth || auth.login || !loaded || trustedHeaders === false) return; // Přihlášení přes hlavičky z proxy (případně pokus „naprázdno", pokud nevíme, jak server přihlašuje) setTrustedError(undefined); login().then(response => { const token = response.data; if (token) { auth.setToken(token as unknown as string); // TODO vyřešit, API definice je špatně, je to skutečně string } else if (trustedHeaders) { setTrustedError((response.error as any)?.error ?? 'Přihlášení přes proxy se nezdařilo.'); } }).catch(() => { if (trustedHeaders) setTrustedError('Server je nedostupný. Zkuste to prosím za chvíli.'); }); }, [auth, loaded, trustedHeaders, attempt]); const doLogin = useCallback(async () => { const length = loginRef?.current?.value.length && loginRef.current.value.replaceAll(/\s/g, '').length if (length) { const response = await login({ body: { login: loginRef.current?.value } }); if (response.data) { auth?.setToken(response.data as unknown as string); // TODO vyřešit } } }, [auth]); if (auth?.login) { return
Neplatný stav
} const header = <>

Luncher

Aplikace pro profesionální management obědů

; // Přihlašuje proxy — formulář se jménem nedává smysl if (!loaded || trustedHeaders) { return (
{header} {trustedError ? (

{trustedError}

) : (

Přihlašuji…

)}
); } return (
{header}
{ if (event.key === 'Enter') { doLogin() } }} />

Zadejte jméno nebo přezdívku, pod kterou vás kolegové snadno identifikují. Jméno je možné kdykoli změnit.

); }