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 useNavigateTo from "@/hooks/useNavigateTo"; import useWorkspaceStore from "@/stores/v1/workspace"; import * as api from "../helpers/api"; import useLoading from "../hooks/useLoading"; import useUserStore from "../stores/v1/user"; const SignIn: React.FC = () => { const { t } = useTranslation(); const navigateTo = useNavigateTo(); const userStore = useUserStore(); const workspaceStore = useWorkspaceStore(); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const actionBtnLoadingState = useLoading(false); const allowConfirm = email.length > 0 && password.length > 0; useEffect(() => { if (userStore.getCurrentUser()) { return navigateTo("/", { replace: true, }); } if (workspaceStore.profile.mode === "demo") { setEmail("steven@yourselfhosted.com"); setPassword("secret"); } }, []); const handleEmailInputChanged = (e: React.ChangeEvent) => { const text = e.target.value as string; setEmail(text); }; const handlePasswordInputChanged = (e: React.ChangeEvent) => { const text = e.target.value as string; setPassword(text); }; const handleSigninBtnClick = async (e: FormEvent) => { e.preventDefault(); if (actionBtnLoadingState.isLoading) { return; } try { actionBtnLoadingState.setLoading(); await api.signin(email, password); const user = await userStore.fetchCurrentUser(); if (user) { navigateTo("/", { replace: true, }); } else { toast.error("Signin failed"); } } catch (error: any) { console.error(error); toast.error(error.response.data.message); } actionBtnLoadingState.setFinish(); }; return (
logo Slash
{t("common.email")}
{t("common.password")}
{workspaceStore.profile.enableSignup && (

{"Don't have an account yet?"} {t("auth.sign-up")}

)}
); }; export default SignIn;