@@ -2,7 +2,7 @@ import React, {useState} from 'react';
22import { AlertCircle , CheckCircle , ChefHat , Mail , X , Lock } from 'lucide-react' ;
33import { Button } from "@/app/components/ui/button" ;
44import "./popup.css"
5-
5+ import { useRouter } from 'next/navigation' ;
66
77interface AnmeldenProps {
88 isOpen : boolean ;
@@ -11,6 +11,8 @@ interface AnmeldenProps {
1111}
1212
1313export function Anmelden ( { isOpen, onClose, onSwitchToRegister } : AnmeldenProps ) {
14+ const router = useRouter ( ) ;
15+
1416 const [ formData , setFormData ] = useState ( {
1517 email : '' ,
1618 password : '' ,
@@ -24,7 +26,7 @@ export function Anmelden({ isOpen, onClose, onSwitchToRegister }: AnmeldenProps)
2426 email : false ,
2527 password : false ,
2628 } ) ;
27- const [ submitted , setSubmitted ] = useState ( false ) ;
29+ const [ message , setMessage ] = useState ( '' ) ;
2830
2931 const validateEmail = ( email : string ) => {
3032 const regex = / ^ [ ^ \s @ ] + @ [ ^ \s @ ] + \. [ ^ \s @ ] + $ / ;
@@ -93,7 +95,7 @@ export function Anmelden({ isOpen, onClose, onSwitchToRegister }: AnmeldenProps)
9395 setErrors ( newErrors ) ;
9496 } ;
9597
96- const handleSubmit = ( ) => {
98+ const handleSubmit = async ( ) => {
9799 // Alle Felder als berührt markieren
98100 setTouched ( {
99101 email : true ,
@@ -104,20 +106,37 @@ export function Anmelden({ isOpen, onClose, onSwitchToRegister }: AnmeldenProps)
104106 setErrors ( newErrors ) ;
105107
106108 if ( ! newErrors . email && ! newErrors . password ) {
107- // Hier würdest du normalerweise die API aufrufen
108109 console . log ( 'Formular erfolgreich validiert:' , formData ) ;
109- setSubmitted ( true ) ;
110-
111- // Formular zurücksetzen nach 2 Sekunden
112- setTimeout ( ( ) => {
113- setFormData ( {
114- email : '' ,
115- password : '' ,
110+ try {
111+ const response = await fetch ( 'http://localhost:3000/api/login' , {
112+ method : 'POST' ,
113+ headers : {
114+ 'Content-Type' : 'application/json' ,
115+ } ,
116+ body : JSON . stringify ( formData ) ,
116117 } ) ;
117- setTouched ( { email : false , password : false } ) ;
118- setSubmitted ( false ) ;
119- onClose ( )
120- } , 2000 ) ;
118+
119+ const data = await response . json ( ) ;
120+
121+
122+ if ( response . ok && data . message . includes ( 'erfolgreich' ) ) {
123+ setMessage ( data . message || 'Anmeldung erfolgreich' ) ;
124+ setFormData ( { email : '' , password : '' } ) ;
125+
126+ setTouched ( { email : false , password : false } ) ;
127+ onClose ( ) ;
128+ setMessage ( '' ) ;
129+ router . push ( '/recipeFinder' ) ;
130+
131+ } else {
132+ // Fehler vom Backend (Status 400-599)
133+ setMessage ( data . detail || data . message || 'Anmeldung fehlgeschlagen' ) ;
134+ }
135+ } catch ( error ) {
136+ // Netzwerkfehler
137+ setMessage ( 'Netzwerkfehler: Backend nicht erreichbar' ) ;
138+ console . error ( 'Error:' , error ) ;
139+ }
121140 }
122141 } ;
123142
@@ -154,10 +173,13 @@ export function Anmelden({ isOpen, onClose, onSwitchToRegister }: AnmeldenProps)
154173 </ p >
155174 </ div >
156175
157- { submitted && (
158- < div className = "mb-6 p-4 bg-green-50 border border-green-200 rounded-lg flex items-center gap-3" >
159- < CheckCircle className = "text-green-600" size = { 20 } />
160- < span className = "text-green-800 font-medium" > Erfolgreich angemeldet!</ span >
176+ { message && (
177+ < div className = { `mt-4 p-3 rounded-md ${
178+ message . includes ( 'erfolgreich' )
179+ ? 'bg-green-100 text-green-700'
180+ : 'bg-red-100 text-red-700'
181+ } `} >
182+ { message }
161183 </ div >
162184 ) }
163185
0 commit comments