import { FormEvent, useState } from "react"; import { apiPost } from "../lib/api"; import { useSession } from "../lib/session"; import type { UserOption } from "../lib/types"; type FeedbackState = | { type: "error"; text: string } | { type: "success"; text: string } | null; export default function LoginPage() { const [showRegistration, setShowRegistration] = useState(false); const [identifier, setIdentifier] = useState(""); const [password, setPassword] = useState(""); const [showLoginValidation, setShowLoginValidation] = useState(false); const [showRegisterValidation, setShowRegisterValidation] = useState(false); const [registration, setRegistration] = useState({ companyName: "", street: "", houseNumber: "", postalCode: "", city: "", email: "", phoneNumber: "", password: "", passwordConfirmation: "", }); const [feedback, setFeedback] = useState(null); const { setUser } = useSession(); async function handlePasswordLogin(event: FormEvent) { event.preventDefault(); setShowLoginValidation(true); if (!identifier.trim() || !password.trim()) { setFeedback({ type: "error", text: "Bitte E-Mail oder Benutzername und Passwort eingeben.", }); return; } try { setFeedback(null); const response = await apiPost("/session/password-login", { identifier: identifier.trim(), password, }); setUser(response); } catch (loginError) { setFeedback({ type: "error", text: (loginError as Error).message }); } } async function handleRegister(event: FormEvent) { event.preventDefault(); setShowRegisterValidation(true); if ( !registration.companyName.trim() || !registration.street.trim() || !registration.houseNumber.trim() || !registration.postalCode.trim() || !registration.city.trim() || !registration.email.trim() || !registration.phoneNumber.trim() || !registration.password.trim() ) { setFeedback({ type: "error", text: "Bitte alle Pflichtfelder inklusive Telefonnummer fuer die Registrierung ausfuellen.", }); return; } if (registration.password !== registration.passwordConfirmation) { setFeedback({ type: "error", text: "Die beiden Passwoerter stimmen nicht ueberein." }); return; } try { setFeedback(null); const { passwordConfirmation, ...registrationPayload } = registration; void passwordConfirmation; const response = await apiPost("/session/register", registrationPayload); setFeedback({ type: "success", text: `Registrierung erfolgreich. Willkommen ${response.companyName ?? response.displayName}.`, }); setUser(response); } catch (registrationError) { setFeedback({ type: "error", text: (registrationError as Error).message }); } } return (

MUH-App

Moderne Steuerung fuer Milchproben und Therapien.

Fokus auf klare Arbeitsablaeufe, schnelle Probenbearbeitung und ein Portal fuer Verwaltung, Berichtsdruck und Versandstatus.

Zugang

Anmelden oder registrieren

Anmeldung per E-Mail oder Benutzername mit Passwort sowie direkte Kundenregistrierung.

{feedback ? (
{feedback.text}
) : null}
{!showRegistration ? (
) : (
)}
); }