import React, { useState, useRef } from 'react' import { hot } from 'react-hot-loader/root' import useBlessingExtra from '@/scripts/hooks/useBlessingExtra' import { t } from '@/scripts/i18n' import * as fetch from '@/scripts/net' import { toast } from '@/scripts/notify' import Alert from '@/components/Alert' import Captcha from '@/components/Captcha' const Registration: React.FC = () => { const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [confirmation, setConfirmation] = useState('') const [nickName, setNickName] = useState('') const [playerName, setPlayerName] = useState('') const [isPending, setIsPending] = useState(false) const [warningMessage, setWarningMessage] = useState('') const requirePlayer = useBlessingExtra('player') const confirmationRef = useRef(null) const captchaRef = useRef(null) const handleEmailChange = (event: React.ChangeEvent) => { setEmail(event.target.value) } const handlePasswordChange = (event: React.ChangeEvent) => { setPassword(event.target.value) } const handleConfirmationChange = ( event: React.ChangeEvent, ) => { setConfirmation(event.target.value) } const handleNickNameChange = (event: React.ChangeEvent) => { setNickName(event.target.value) } const handlePlayerNameChange = ( event: React.ChangeEvent, ) => { setPlayerName(event.target.value) } const handleSubmit = async (event: React.FormEvent) => { event.preventDefault() setWarningMessage('') if (password !== confirmation) { setWarningMessage(t('auth.invalidConfirmPwd')) confirmationRef.current!.focus() return } setIsPending(true) const { code, message } = await fetch.post( '/auth/register', Object.assign( { email, password, captcha: await captchaRef.current!.execute() }, requirePlayer ? { player_name: playerName } : { nickname: nickName }, ), ) if (code === 0) { toast.success(message) setTimeout(() => { window.location.href = `${blessing.base_url}/user` }, 3000) } else { setWarningMessage(message) captchaRef.current!.reset() } setIsPending(false) } return (
{requirePlayer ? (
) : (
)} {warningMessage}
{t('auth.login-link')}
) } export default hot(Registration)