Files
parakasa/app/(public)/signup/page.tsx

134 lines
5.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use client"
import { useState } from "react"
import { useRouter } from "next/navigation"
import Link from "next/link"
import { supabase } from "@/lib/supabase"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"
import { AlertCircle, Loader2, CheckCircle2 } from "lucide-react"
export default function SignUpPage() {
const router = useRouter()
const [email, setEmail] = useState("")
const [password, setPassword] = useState("")
const [loading, setLoading] = useState(false)
const [error, setError] = useState<string | null>(null)
const [success, setSuccess] = useState(false)
const handleSignUp = async (e: React.FormEvent) => {
e.preventDefault()
setLoading(true)
setError(null)
try {
const { data, error } = await supabase.auth.signUp({
email,
password,
options: {
emailRedirectTo: `${location.origin}/auth/callback`,
},
})
if (error) {
setError(error.message)
return
}
if (data.user) {
setSuccess(true)
}
} catch (err: any) {
setError("Bir hata oluştu. Lütfen tekrar deneyin.")
} finally {
setLoading(false)
}
}
if (success) {
return (
<div className="flex items-center justify-center min-h-screen bg-slate-50 dark:bg-slate-950 px-4">
<Card className="w-full max-w-md">
<CardHeader className="space-y-1 text-center">
<div className="flex justify-center mb-4">
<CheckCircle2 className="h-12 w-12 text-green-500" />
</div>
<CardTitle className="text-2xl font-bold text-green-600">Başarılı!</CardTitle>
<CardDescription className="text-base mt-2">
Kayıt işleminiz başarıyla tamamlandı. Lütfen e-posta adresinizi kontrol ederek hesabınızı doğrulayın.
</CardDescription>
</CardHeader>
<CardFooter className="flex justify-center pt-6">
<Button asChild variant="outline">
<Link href="/login">Giriş Yap</Link>
</Button>
</CardFooter>
</Card>
</div>
)
}
return (
<div className="flex items-center justify-center min-h-screen bg-slate-50 dark:bg-slate-950 px-4">
<Card className="w-full max-w-md">
<CardHeader className="space-y-1">
<CardTitle className="text-2xl font-bold">Hesap Oluştur</CardTitle>
<CardDescription>
ParaKasa'ya katılmak için bilgilerinizi girin
</CardDescription>
</CardHeader>
<CardContent>
<form onSubmit={handleSignUp} className="space-y-4">
<div className="space-y-2">
<Label htmlFor="email">Email</Label>
<Input
id="email"
type="email"
placeholder="ornek@sirket.com"
value={email}
onChange={(e) => setEmail(e.target.value)}
required
/>
</div>
<div className="space-y-2">
<Label htmlFor="password">Şifre</Label>
<Input
id="password"
type="password"
value={password}
onChange={(e) => setPassword(e.target.value)}
required
minLength={6}
/>
<p className="text-xs text-muted-foreground">En az 6 karakter olmalıdır.</p>
</div>
{error && (
<div className="flex items-center space-x-2 text-sm text-red-600 bg-red-50 p-3 rounded-md">
<AlertCircle className="h-4 w-4" />
<span>{error}</span>
</div>
)}
<Button className="w-full" type="submit" disabled={loading}>
{loading && <Loader2 className="mr-2 h-4 w-4 animate-spin" />}
Kayıt Ol
</Button>
</form>
</CardContent>
<CardFooter className="flex flex-col gap-4 text-center text-sm text-muted-foreground">
<div className="text-center">
Zaten hesabınız var mı?{" "}
<Link href="/login" className="underline underline-offset-4 hover:text-primary">
Giriş Yap
</Link>
</div>
<Link href="/" className="underline underline-offset-4 hover:text-primary">
Ana Sayfaya Dön
</Link>
</CardFooter>
</Card>
</div>
)
}