import { useState, useEffect, FormEvent, ChangeEvent, FC } from "react"; import StyledWrapper from "./styled"; import { Navigate } from "react-router-dom"; import toast from "react-hot-toast"; import BASE_URL from "../../app/config"; import { useRegisterMutation } from "../../app/services/auth"; import { useCheckMagicTokenValidMutation } from "../../app/services/auth"; import { useAppSelector } from "../../app/store"; interface AuthForm { name: string; email: string; password: string; } const InvitePage: FC = () => { const { token: loginToken } = useAppSelector((store) => store.authData); const [secondPwd, setSecondPwd] = useState(""); const [samePwd, setSamePwd] = useState(true); const [token, setToken] = useState(""); const [valid, setValid] = useState(false); const [register, { data, isLoading, isSuccess, isError, error }] = useRegisterMutation(); const [checkToken, { data: isValid, isLoading: checkLoading, isSuccess: checkSuccess }] = useCheckMagicTokenValidMutation(); useEffect(() => { const query = new URLSearchParams(location.search); setToken(query.get("token")); }, []); useEffect(() => { if (token) { checkToken(token); } }, [token]); useEffect(() => { if (checkSuccess) { setValid(!!isValid); } else { setValid(false); } }, [checkSuccess, isValid]); const [input, setInput] = useState({ name: "", email: "", password: "" }); const handleReg = (evt: FormEvent) => { evt.preventDefault(); if (!samePwd) { toast.error("two passwords not same"); return; } register({ ...input, magic_token: token, gender: 1 }); }; const handleInput = (evt: ChangeEvent) => { const { type } = evt.target.dataset as { type: keyof AuthForm }; const { value } = evt.target; setInput((prev) => { prev[type] = value; return { ...prev }; }); }; const handleSecondPwdInput = (evt: ChangeEvent) => { const { value } = evt.target; setSecondPwd(value); }; const handlePwdCheck = () => { if (secondPwd) { setSamePwd(secondPwd == input.password); } }; useEffect(() => { if (!samePwd) { toast.error("two passwords not same"); } }, [samePwd]); useEffect(() => { if (isSuccess && data) { // 去登录 toast.success("register success, login please"); setTimeout(() => { location.href = `/#/login`; // navigateTo("/login",); }, 500); } else if (isError && error && "data" in error) { switch (error.status) { case 400: toast.error("Register Failed: please check inputs"); break; case 412: toast.error("Register Failed: invalid token or expired"); break; case 409: { toast.error(`Register Failed: ${error.data?.reason}`); break; } default: toast.error("Register Failed"); break; } } }, [data, isSuccess, isError, error]); const { email, password, name } = input; if (loginToken) return ; if (!token) return <>token not found; if (checkLoading) return <>checking token valid; if (!valid) return <>invite token expires or invalid; return (
logo

Sign Up to VoceChat

Please enter your details.
); }; export default InvitePage;