import { createFileRoute, useNavigate } from '@tanstack/react-router' import { useState } from 'react' import { useQueryClient } from '@tanstack/react-query' import { Box, Card, TextInput, PasswordInput, Button, Text, Stack, Alert, Group, } from '@pikku/mantine/core' import { m } from '@/i18n/messages' import { useLocale } from '@/i18n/config' import type { I18nString } from '@pikku/react' import { signIn, INVALID_CREDENTIALS } from '../lib/auth' function LoginPage() { useLocale() const navigate = useNavigate() const qc = useQueryClient() const [email, setEmail] = useState(import.meta.env.DEV ? 'admin@perauset.org' : '') const [password, setPassword] = useState(import.meta.env.DEV ? 'test' : '') const [isPending, setIsPending] = useState(false) const [error, setError] = useState(null) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setIsPending(true) setError(null) try { await signIn(email, password) await qc.invalidateQueries({ queryKey: ['me'] }) navigate({ to: '/' }) } catch (err: any) { setError(err.message === INVALID_CREDENTIALS ? m.login_invalid_credentials() : m.login_error()) } finally { setIsPending(false) } } return (
{m.brand()} {m.login_subtitle()} {error && ( {error} )} setEmail(e.currentTarget.value)} /> setPassword(e.currentTarget.value)} />
) } export const Route = createFileRoute('/login')({ component: LoginPage, })