From 718928fdc254ed1b2cdc1865ccfa03187a9805d5 Mon Sep 17 00:00:00 2001 From: bender Date: Fri, 6 Mar 2026 21:33:57 +0000 Subject: [PATCH] Add src/app/login/page.tsx --- src/app/login/page.tsx | 257 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 257 insertions(+) create mode 100644 src/app/login/page.tsx diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx new file mode 100644 index 0000000..0d83862 --- /dev/null +++ b/src/app/login/page.tsx @@ -0,0 +1,257 @@ +"use client"; + +import { useState } from "react"; +import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider"; +import NavbarStyleFullscreen from "@/components/navbar/NavbarStyleFullscreen/NavbarStyleFullscreen"; +import FooterLogoReveal from "@/components/sections/footer/FooterLogoReveal"; +import { Eye, EyeOff, AlertCircle, CheckCircle } from "lucide-react"; + +interface LoginFormData { + email: string; + password: string; +} + +interface LoginErrors { + email?: string; + password?: string; +} + +export default function LoginPage() { + const navItems = [ + { name: "Ana Sayfa", id: "/" }, + { name: "Öğretmenler", id: "/teachers" }, + { name: "Etkinlikler", id: "events" }, + { name: "Çalışma Programı", id: "schedule" }, + ]; + + const [formData, setFormData] = useState({ + email: "", password: ""}); + + const [errors, setErrors] = useState({}); + const [showPassword, setShowPassword] = useState(false); + const [isSubmitting, setIsSubmitting] = useState(false); + const [submitSuccess, setSubmitSuccess] = useState(false); + const [rememberMe, setRememberMe] = useState(false); + + const validateForm = (): boolean => { + const newErrors: LoginErrors = {}; + + if (!formData.email.trim()) { + newErrors.email = "E-posta gereklidir"; + } else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(formData.email)) { + newErrors.email = "Geçerli bir e-posta adresi girin"; + } + + if (!formData.password) { + newErrors.password = "Şifre gereklidir"; + } + + setErrors(newErrors); + return Object.keys(newErrors).length === 0; + }; + + const handleChange = ( + e: React.ChangeEvent + ) => { + const { name, value } = e.target; + setFormData((prev) => ({ + ...prev, + [name]: value, + })); + if (errors[name as keyof LoginErrors]) { + setErrors((prev) => ({ + ...prev, + [name]: undefined, + })); + } + }; + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + + if (!validateForm()) { + return; + } + + setIsSubmitting(true); + + try { + const response = await fetch("/api/auth/login", { + method: "POST", headers: { + "Content-Type": "application/json"}, + body: JSON.stringify({ + email: formData.email, + password: formData.password, + rememberMe: rememberMe, + }), + }); + + if (response.ok) { + setSubmitSuccess(true); + setFormData({ + email: "", password: ""}); + setTimeout(() => { + window.location.href = "/dashboard"; + }, 1500); + } else { + const data = await response.json(); + setErrors({ email: data.message || "Giriş başarısız oldu" }); + } + } catch (error) { + setErrors({ email: "Bir hata oluştu. Lütfen tekrar deneyin." }); + } finally { + setIsSubmitting(false); + } + }; + + return ( + + + +
+
+
+

Giriş Yap

+

Hesabınıza giriş yaparak öğrenmeye başlayın

+
+ + {submitSuccess && ( +
+ +
+

Başarılı!

+

+ Giriş başarıyla gerçekleştirildi. Yönlendiriliyorsunuz... +

+
+
+ )} + +
+
+ + + {errors.email && ( +
+ + {errors.email} +
+ )} +
+ +
+ +
+ + +
+ {errors.password && ( +
+ + {errors.password} +
+ )} +
+ +
+ setRememberMe(e.target.checked)} + className="rounded border-gray-300" + /> + +
+ + +
+ +
+

+ + Şifremi unuttum + +

+

+ Hesabınız yok mu?{" "} + + Kayıt olun + +

+
+
+
+ + +
+ ); +}