Files
next-dj/app/auth/resend-activation/page.tsx
Beyhan Oğur e881f38e4e first commit
2026-04-26 22:12:36 +03:00

141 lines
4.8 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, FormEvent } from "react";
import Link from "next/link";
const API_BASE_URL = process.env.NEXT_PUBLIC_API_BASE_URL || "http://localhost:8000/api/v1";
export default function ResendActivationPage() {
const [email, setEmail] = useState("");
const [error, setError] = useState("");
const [loading, setLoading] = useState(false);
const [success, setSuccess] = useState(false);
const handleSubmit = async (e: FormEvent<HTMLFormElement>) => {
e.preventDefault();
setError("");
setLoading(true);
try {
const response = await fetch(`${API_BASE_URL}/auth/users/resend_activation/`, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({ email }),
});
if (response.ok || response.status === 204) {
setSuccess(true);
} else {
const data = await response.json();
setError(data.detail || data.email?.[0] || "Email gönderilemedi.");
}
} catch (err) {
setError("Bir hata oluştu. Lütfen tekrar deneyin.");
console.error("Resend activation error:", err);
} finally {
setLoading(false);
}
};
if (success) {
return (
<div className="min-h-screen flex items-center justify-center bg-gray-50">
<div className="max-w-md w-full space-y-8 p-8 bg-white rounded-lg shadow">
<div className="text-center">
<div className="mx-auto flex items-center justify-center h-12 w-12 rounded-full bg-green-100">
<svg
className="h-6 w-6 text-green-600"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth="2"
d="M5 13l4 4L19 7"
/>
</svg>
</div>
<h2 className="mt-6 text-center text-3xl font-bold text-gray-900">
Email Gönderildi!
</h2>
<p className="mt-2 text-center text-sm text-gray-600">
Aktivasyon emaili başarıyla gönderildi. Lütfen email adresinizi kontrol edin.
</p>
<div className="mt-6">
<Link
href="/auth/login"
className="inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md text-white bg-blue-600 hover:bg-blue-700"
>
Giriş Sayfasına Dön
</Link>
</div>
</div>
</div>
</div>
);
}
return (
<div className="min-h-screen flex items-center justify-center bg-gray-50 py-12 px-4 sm:px-6 lg:px-8">
<div className="max-w-md w-full space-y-8">
<div>
<h2 className="mt-6 text-center text-3xl font-bold text-gray-900">
Aktivasyon Emaili Tekrar Gönder
</h2>
<p className="mt-2 text-center text-sm text-gray-600">
Email adresinizi girin, size yeni bir aktivasyon linki gönderelim.
</p>
</div>
<form className="mt-8 space-y-6" onSubmit={handleSubmit}>
<div>
<label htmlFor="email" className="block text-sm font-medium text-gray-700 mb-1">
Email adresi
</label>
<input
id="email"
name="email"
type="email"
autoComplete="email"
required
className="appearance-none relative block w-full px-3 py-2 border border-gray-300 placeholder-gray-500 text-gray-900 rounded-md focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm"
placeholder="ornek@email.com"
value={email}
onChange={(e) => setEmail(e.target.value)}
/>
</div>
{error && (
<div className="rounded-md bg-red-50 p-4">
<p className="text-sm text-red-800">{error}</p>
</div>
)}
<div>
<button
type="submit"
disabled={loading}
className="group relative w-full flex justify-center py-2 px-4 border border-transparent text-sm font-medium rounded-md text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 disabled:opacity-50 disabled:cursor-not-allowed"
>
{loading ? "Gönderiliyor..." : "Aktivasyon Emaili Gönder"}
</button>
</div>
<div className="text-center">
<Link
href="/auth/login"
className="text-sm font-medium text-blue-600 hover:text-blue-500"
>
Giriş sayfasına dön
</Link>
</div>
</form>
</div>
</div>
);
}