11import { useState } from "react" ;
22import { Link } from "react-router-dom" ;
33import { ArrowLeft , Check , Rocket } from "lucide-react" ;
4+ import { supabase } from "../utils/supabase" ;
45
56export default function ForgotPasswordPage ( ) {
67 const [ email , setEmail ] = useState ( "" ) ;
78 const [ isLoading , setIsLoading ] = useState ( false ) ;
89 const [ isSubmitted , setIsSubmitted ] = useState ( false ) ;
910 const [ error , setError ] = useState ( "" ) ;
11+ const [ showSignupPrompt , setShowSignupPrompt ] = useState ( false ) ;
1012
1113 const handleSubmit = async ( e : React . FormEvent < HTMLFormElement > ) => {
1214 e . preventDefault ( ) ;
1315 setIsLoading ( true ) ;
1416 setError ( "" ) ;
17+ setShowSignupPrompt ( false ) ;
1518
1619 try {
17- // In a real app, you would call your auth API here
18- await new Promise ( ( resolve ) => setTimeout ( resolve , 1500 ) ) ;
20+ // Check if email exists in users table
21+ const { data : users , error : userError } = await supabase
22+ . from ( "users" )
23+ . select ( "id" )
24+ . eq ( "email" , email )
25+ . maybeSingle ( ) ;
26+ if ( userError ) throw userError ;
27+ if ( ! users ) {
28+ setShowSignupPrompt ( true ) ;
29+ setIsLoading ( false ) ;
30+ return ;
31+ }
32+ const { error } = await supabase . auth . resetPasswordForEmail ( email , {
33+ redirectTo : window . location . origin + "/reset-password"
34+ } ) ;
35+ if ( error ) throw error ;
1936 setIsSubmitted ( true ) ;
20- } catch ( err ) {
21- setError ( "Something went wrong. Please try again." ) ;
37+ } catch ( err : any ) {
38+ setError ( err . message || "Something went wrong. Please try again." ) ;
2239 } finally {
2340 setIsLoading ( false ) ;
2441 }
@@ -88,6 +105,12 @@ export default function ForgotPasswordPage() {
88105 </ div >
89106 ) }
90107
108+ { showSignupPrompt && (
109+ < div className = "mb-6 p-4 bg-yellow-50 dark:bg-yellow-900/20 border border-yellow-200 dark:border-yellow-800 rounded-lg text-yellow-700 dark:text-yellow-400 text-sm animate-[pulse_1s_ease-in-out]" >
110+ No account found with this email. < Link to = "/signup" className = "underline text-purple-600" > Sign up?</ Link >
111+ </ div >
112+ ) }
113+
91114 < form onSubmit = { handleSubmit } className = "space-y-6" >
92115 < div className = "space-y-2" >
93116 < label
@@ -103,7 +126,7 @@ export default function ForgotPasswordPage() {
103126 onChange = { ( e ) => setEmail ( e . target . value ) }
104127 required
105128 className = "w-full px-4 py-3 rounded-lg border border-gray-300 dark:border-gray-600 focus:outline-none focus:ring-2 focus:ring-purple-500 dark:focus:ring-purple-400 focus:border-transparent bg-white dark:bg-gray-700 text-gray-900 dark:text-white transition-all duration-200"
106- placeholder = "you@example.com"
129+ placeholder = "you@example.com (CASE sensitive) "
107130 />
108131 </ div >
109132
0 commit comments