perf(prettier): perf

This commit is contained in:
2026-02-11 13:57:47 +08:00
parent 2696ec8692
commit 03a1e6043d
21 changed files with 354 additions and 285 deletions

View File

@@ -1,50 +1,52 @@
import * as React from "react"
import Link from "next/link"
import * as React from "react";
import Link from "next/link";
import { Button } from "@/components/ui/button"
import { Checkbox } from "@/components/ui/checkbox"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
import { CaptchaField } from "@/components/auth/captcha-field"
import { Button } from "@/components/ui/button";
import { Checkbox } from "@/components/ui/checkbox";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { CaptchaField } from "@/components/auth/captcha-field";
export function LoginForm(props: {
clientId: string
tenantId: string
callback: string
initialEmail: string
prefillPassword?: string
disabled?: boolean
externalError?: string | null
onClearExternalError?: () => void
captcha: string
onCaptchaChange: (next: string) => void
captchaKey: string
onRefreshCaptcha: () => void
clientId: string;
tenantId: string;
callback: string;
initialEmail: string;
prefillPassword?: string;
disabled?: boolean;
externalError?: string | null;
onClearExternalError?: () => void;
captcha: string;
onCaptchaChange: (next: string) => void;
captchaKey: string;
onRefreshCaptcha: () => void;
}) {
const [email, setEmail] = React.useState(props.initialEmail)
const [password, setPassword] = React.useState("")
const [rememberMe, setRememberMe] = React.useState(Boolean(props.initialEmail))
const [submitting, setSubmitting] = React.useState(false)
const [error, setError] = React.useState<string | null>(null)
const [email, setEmail] = React.useState(props.initialEmail);
const [password, setPassword] = React.useState("");
const [rememberMe, setRememberMe] = React.useState(
Boolean(props.initialEmail),
);
const [submitting, setSubmitting] = React.useState(false);
const [error, setError] = React.useState<string | null>(null);
React.useEffect(() => {
setEmail(props.initialEmail)
setRememberMe(Boolean(props.initialEmail))
}, [props.initialEmail])
setEmail(props.initialEmail);
setRememberMe(Boolean(props.initialEmail));
}, [props.initialEmail]);
React.useEffect(() => {
if (props.prefillPassword) {
setPassword(props.prefillPassword)
setPassword(props.prefillPassword);
}
}, [props.prefillPassword])
}, [props.prefillPassword]);
const missingParams = !props.clientId || !props.tenantId || !props.callback
const missingParams = !props.clientId || !props.tenantId || !props.callback;
async function onSubmit(e: React.FormEvent) {
e.preventDefault()
setError(null)
props.onClearExternalError?.()
setSubmitting(true)
e.preventDefault();
setError(null);
props.onClearExternalError?.();
setSubmitting(true);
try {
const res = await fetch("/api/auth/login", {
method: "POST",
@@ -58,22 +60,25 @@ export function LoginForm(props: {
captcha: props.captcha,
rememberMe,
}),
})
const json = (await res.json()) as { redirectTo?: string; message?: string }
});
const json = (await res.json()) as {
redirectTo?: string;
message?: string;
};
if (!res.ok || !json.redirectTo) {
throw new Error(json.message || "登录失败")
throw new Error(json.message || "登录失败");
}
window.location.href = json.redirectTo
window.location.href = json.redirectTo;
} catch (err) {
setError(err instanceof Error ? err.message : "登录失败")
props.onCaptchaChange("")
props.onRefreshCaptcha()
setError(err instanceof Error ? err.message : "登录失败");
props.onCaptchaChange("");
props.onRefreshCaptcha();
} finally {
setSubmitting(false)
setSubmitting(false);
}
}
const disabled = Boolean(props.disabled) || submitting
const disabled = Boolean(props.disabled) || submitting;
return (
<form onSubmit={onSubmit} className="space-y-4">
@@ -146,5 +151,5 @@ export function LoginForm(props: {
{submitting ? "登录中..." : "登录"}
</Button>
</form>
)
);
}