import { Button, Card, Form, Input, message, Typography } from 'antd' import { useNavigate } from 'react-router-dom' import { useTranslation } from 'react-i18next' import apiClient, { isEnvelope } from '../../api/client' import type { SessionUser } from '../../stores/auth' interface Props { onLogin: (u: SessionUser) => void } interface LoginValues { email: string password: string } export default function LoginPage({ onLogin }: Props) { const { t } = useTranslation() const navigate = useNavigate() const onFinish = async (vals: LoginValues) => { try { const r = await apiClient.post('/auth/login', vals) if (isEnvelope(r.data)) { const u = r.data.data as SessionUser onLogin(u) navigate('/dashboard', { replace: true }) return } } catch (e: unknown) { const err = e as { message?: string; status?: number } if (err.status === 503) { // setup-mode → drop to wizard navigate('/setup', { replace: true }) return } message.error(err.message ?? t('auth.loginFailed')) } } return (
{t('app.title')}
) }