first commit
This commit is contained in:
60
components/mail/MailLogin.tsx
Normal file
60
components/mail/MailLogin.tsx
Normal file
@@ -0,0 +1,60 @@
|
||||
"use client";
|
||||
import { useState } from "react";
|
||||
|
||||
export default function MailLogin({ onSuccess }: { onSuccess: (email: string) => void }) {
|
||||
const [email, setEmail] = useState("");
|
||||
const [password, setPassword] = useState("");
|
||||
const [error, setError] = useState("");
|
||||
const [loading, setLoading] = useState(false);
|
||||
|
||||
const handleSubmit = async (e: React.FormEvent) => {
|
||||
e.preventDefault();
|
||||
setError("");
|
||||
setLoading(true);
|
||||
const res = await fetch("/api/mail/auth", {
|
||||
method: "POST",
|
||||
headers: { "Content-Type": "application/json" },
|
||||
body: JSON.stringify({ email, password }),
|
||||
});
|
||||
const data = await res.json();
|
||||
setLoading(false);
|
||||
if (res.ok) {
|
||||
onSuccess(email);
|
||||
} else {
|
||||
setError(data.error || "Bağlantı başarısız");
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<div style={{ display: "flex", alignItems: "center", justifyContent: "center", minHeight: "60vh" }}>
|
||||
<div className="card" style={{ maxWidth: 420, width: "100%" }}>
|
||||
<div style={{ textAlign: "center", marginBottom: 24 }}>
|
||||
<div style={{ fontSize: 32, marginBottom: 8 }}>📧</div>
|
||||
<h2 style={{ fontSize: 18, fontWeight: 700, color: "var(--text-primary)" }}>Mail Hesabına Bağlan</h2>
|
||||
<p style={{ fontSize: 13, color: "var(--text-secondary)", marginTop: 4 }}>
|
||||
Mailcow mail hesabınızın bilgilerini girin
|
||||
</p>
|
||||
</div>
|
||||
<form onSubmit={handleSubmit} className="form-group">
|
||||
{error && <div className="error-msg">{error}</div>}
|
||||
<div>
|
||||
<label className="label">E-posta Adresi</label>
|
||||
<input type="email" className="input" placeholder="info@domain.com" value={email}
|
||||
onChange={(e) => setEmail(e.target.value)} required autoFocus />
|
||||
</div>
|
||||
<div>
|
||||
<label className="label">Şifre</label>
|
||||
<input type="password" className="input" placeholder="Mail hesabı şifresi" value={password}
|
||||
onChange={(e) => setPassword(e.target.value)} required />
|
||||
</div>
|
||||
<button type="submit" className="btn btn-primary" style={{ width: "100%" }} disabled={loading}>
|
||||
{loading ? <span className="spinner" /> : "Bağlan"}
|
||||
</button>
|
||||
<p style={{ fontSize: 11, color: "var(--text-muted)", textAlign: "center", marginTop: 8 }}>
|
||||
Şifreniz sunucuda saklanmaz, sadece oturum süresince kullanılır.
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user