import * as React from "react"
import { Link, Navigate, useNavigate } from "react-router-dom"
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"
import { api } from "@/lib/api"
import { useMe } from "@/hooks/use-me"
import { Button } from "@/components/ui/button"
import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
import { useToast } from "@/hooks/use-toast"
import { TurnstileBox } from "@/components/turnstile-box"
import { validatePasswordConfirm } from "@/lib/validation"
export function RegisterPage() {
const me = useMe()
const qc = useQueryClient()
const navigate = useNavigate()
const { toast } = useToast()
const publicSettings = useQuery({ queryKey: ["public-settings"], queryFn: api.publicSettings })
const [turnstileToken, setTurnstileToken] = React.useState("")
const register = useMutation({
mutationFn: (form: FormData) => {
const password = String(form.get("password") || "")
const confirmPassword = String(form.get("confirmPassword") || "")
validatePasswordConfirm(password, confirmPassword)
return api.register({
email: String(form.get("email") || ""),
displayName: String(form.get("displayName") || ""),
password,
turnstileToken,
})
},
onSuccess: async () => {
await qc.invalidateQueries({ queryKey: ["me"] })
toast({ title: "注册成功" })
navigate("/profile", { replace: true })
},
onError: (e) => toast({ title: "注册失败", description: e.message }),
})
const turnstileRequired = !!publicSettings.data?.turnstileEnabled
if (me.data?.user) return