import { Button, Input } from "@mui/joy"; import React, { FormEvent, useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { useTranslation } from "react-i18next"; import { Link } from "react-router-dom"; import Logo from "@/components/Logo"; import { authServiceClient } from "@/grpcweb"; import useLoading from "@/hooks/useLoading"; import useNavigateTo from "@/hooks/useNavigateTo"; import { useUserStore, useWorkspaceStore } from "@/stores"; const SignUp: React.FC = () => { const { t } = useTranslation(); const navigateTo = useNavigateTo(); const workspaceStore = useWorkspaceStore(); const userStore = useUserStore(); const [email, setEmail] = useState(""); const [nickname, setNickname] = useState(""); const [password, setPassword] = useState(""); const actionBtnLoadingState = useLoading(false); const allowConfirm = email.length > 0 && nickname.length > 0 && password.length > 0; useEffect(() => { if (workspaceStore.setting.disallowUserRegistration) { return navigateTo("/auth", { replace: true, }); } }, []); const handleEmailInputChanged = (e: React.ChangeEvent) => { const text = e.target.value as string; setEmail(text); }; const handleNicknameInputChanged = (e: React.ChangeEvent) => { const text = e.target.value as string; setNickname(text); }; const handlePasswordInputChanged = (e: React.ChangeEvent) => { const text = e.target.value as string; setPassword(text); }; const handleSignupBtnClick = async (e: FormEvent) => { e.preventDefault(); if (actionBtnLoadingState.isLoading) { return; } try { actionBtnLoadingState.setLoading(); const user = await authServiceClient.signUp({ email, nickname, password, }); if (user) { userStore.setCurrentUserId(user.id); await userStore.fetchCurrentUser(); navigateTo("/"); } else { toast.error("Signup failed"); } } catch (error: any) { console.error(error); toast.error(error.details); } actionBtnLoadingState.setFinish(); }; return (
Slash

{t("auth.create-your-account")}

{t("common.email")}
Nickname
{t("common.password")}
{!workspaceStore.profile.owner ? (

{t("auth.host-tip")}

) : (

{"Already has an account?"} {t("auth.sign-in")}

)}
); }; export default SignUp;