Initial working state: CL3.5 complete (Plesk sync + suspend/unsuspend)

This commit is contained in:
2026-03-05 06:47:43 +00:00
commit a36d55eae5
53 changed files with 9925 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
"use client";
import { useState } from "react";
import type { FormEvent } from "react";
import { createSupabaseBrowserClient } from "@/lib/supabase/browser";
export function LoginForm() {
const [email, setEmail] = useState("");
const [message, setMessage] = useState<string | null>(null);
const [loading, setLoading] = useState(false);
async function onSubmit(event: FormEvent<HTMLFormElement>) {
event.preventDefault();
setLoading(true);
setMessage(null);
try {
const supabase = createSupabaseBrowserClient();
const { error } = await supabase.auth.signInWithOtp({
email,
options: {
emailRedirectTo: `${window.location.origin}/auth/callback`,
},
});
if (error) {
setMessage(error.message);
} else {
setMessage("Check your email for the sign-in link.");
}
} finally {
setLoading(false);
}
}
return (
<form onSubmit={onSubmit} className="space-y-4 rounded-xl border border-slate-200 bg-white p-6 shadow-sm">
<div>
<label htmlFor="email" className="mb-1 block text-sm font-medium text-slate-700">
Work email
</label>
<input
id="email"
type="email"
required
value={email}
onChange={(event) => setEmail(event.target.value)}
className="w-full rounded-lg border border-slate-300 px-3 py-2 text-sm outline-none focus:border-brand-500"
placeholder="you@agency.com"
/>
</div>
<button
type="submit"
disabled={loading}
className="w-full rounded-lg bg-brand-600 px-4 py-2 text-sm font-medium text-white disabled:opacity-70"
>
{loading ? "Sending..." : "Send magic link"}
</button>
{message ? <p className="text-sm text-slate-600">{message}</p> : null}
</form>
);
}