diff --git a/src/routes/login/SignUpLink.tsx b/src/routes/login/SignUpLink.tsx index b0cba94e..9f2bf750 100644 --- a/src/routes/login/SignUpLink.tsx +++ b/src/routes/login/SignUpLink.tsx @@ -1,12 +1,19 @@ import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; - -export default function MagicLinkLogin() { +type Props = { + smtp?: boolean +} +export default function MagicLinkLogin({ smtp = false }: Props) { const { t } = useTranslation("auth"); const navigate = useNavigate(); const handleSignUp = () => { - navigate("/register"); + if (smtp) { + // 配置了SMTP,走magic link 流程 + navigate("/send_magic_link"); + } else { + navigate("/register"); + } }; return ( diff --git a/src/routes/login/SocialLoginButtons.tsx b/src/routes/login/SocialLoginButtons.tsx new file mode 100644 index 00000000..010bf50a --- /dev/null +++ b/src/routes/login/SocialLoginButtons.tsx @@ -0,0 +1,47 @@ +import { useEffect } from 'react'; +import toast from 'react-hot-toast'; +import { useGetLoginConfigQuery } from "../../app/services/server"; +import useGithubAuthConfig from "../../common/hook/useGithubAuthConfig"; +import useGoogleAuthConfig from "../../common/hook/useGoogleAuthConfig"; +import GoogleLoginButton from "../../common/component/GoogleLoginButton"; +import GithubLoginButton from "../../common/component/GithubLoginButton"; +import MetamaskLoginButton from "./MetamaskLoginButton"; +import OidcLoginButton from "./OidcLoginButton"; +import { useLoginMutation } from '../../app/services/auth'; +import { LoginConfig } from '../../types/server'; + +// type Props = {} + +const SocialLoginButtons = () => { + const [login, { isSuccess }] = useLoginMutation(); + const { config: githubAuthConfig } = useGithubAuthConfig(); + const { data: loginConfig, isSuccess: loginConfigSuccess } = useGetLoginConfigQuery(); + const { clientId } = useGoogleAuthConfig(); + + useEffect(() => { + if (isSuccess) { + toast.success("Login Successfully"); + // navigateTo("/"); + } + }, [isSuccess]); + if (!loginConfigSuccess) return null; + const { + github: enableGithubLogin, + google: enableGoogleLogin, + metamask: enableMetamaskLogin, + oidc = [], + } = loginConfig as LoginConfig; + const googleLogin = enableGoogleLogin && !!clientId; + return ( + <> + {googleLogin && } + {enableGithubLogin && ( + + )} + {enableMetamaskLogin && } + {oidc.length > 0 && } + + ); +}; + +export default SocialLoginButtons; \ No newline at end of file diff --git a/src/routes/login/index.tsx b/src/routes/login/index.tsx index 2913e5fb..6ed9a542 100644 --- a/src/routes/login/index.tsx +++ b/src/routes/login/index.tsx @@ -4,8 +4,7 @@ import toast from "react-hot-toast"; import BASE_URL from "../../app/config"; // import web3 from "web3"; import StyledWrapper from "./styled"; -import MetamaskLoginButton from "./MetamaskLoginButton"; -import OidcLoginButton from "./OidcLoginButton"; + import Input from "../../common/component/styled/Input"; import Button from "../../common/component/styled/Button"; import MagicLinkLogin from "./MagicLinkLogin"; @@ -13,18 +12,15 @@ import SignUpLink from "./SignUpLink"; import { useLoginMutation } from "../../app/services/auth"; import { useGetLoginConfigQuery, useGetSMTPStatusQuery } from "../../app/services/server"; import useGoogleAuthConfig from "../../common/hook/useGoogleAuthConfig"; -import useGithubAuthConfig from "../../common/hook/useGithubAuthConfig"; -import GoogleLoginButton from "../../common/component/GoogleLoginButton"; -import GithubLoginButton from "../../common/component/GithubLoginButton"; import { FetchBaseQueryError } from "@reduxjs/toolkit/dist/query"; import { useTranslation } from "react-i18next"; +import SocialLoginButtons from "./SocialLoginButtons"; export default function LoginPage() { const { t } = useTranslation("auth"); const { data: enableSMTP } = useGetSMTPStatusQuery(); const [login, { isSuccess, isLoading, error }] = useLoginMutation(); const { clientId } = useGoogleAuthConfig(); - const { config: githubAuthConfig } = useGithubAuthConfig(); const { data: loginConfig, isSuccess: loginConfigSuccess } = useGetLoginConfigQuery(); const [input, setInput] = useState({ email: "", @@ -162,12 +158,10 @@ export default function LoginPage() {
{enableMagicLink && } - {googleLogin && } - {enableGithubLogin && } - {enableMetamaskLogin && } - {oidc.length > 0 && } + +
- {whoCanSignUp === "EveryOne" && } + {whoCanSignUp === "EveryOne" && } ); diff --git a/src/routes/login/styled.tsx b/src/routes/login/styled.tsx index 5c719ad9..a88a5b4c 100644 --- a/src/routes/login/styled.tsx +++ b/src/routes/login/styled.tsx @@ -3,7 +3,7 @@ import Button from "../../common/component/styled/Button"; export const StyledSocialButton = styled(Button)` width: 100%; - margin-bottom: 16px; + /* margin-bottom: 16px; */ display: flex; align-items: center; justify-content: center; @@ -63,6 +63,7 @@ const StyledWrapper = styled.div` height: 1px; background-color: #e4e7ec; margin: 26px 0; + overflow: visible; &:after { padding: 4px; background-color: #fff; diff --git a/src/routes/reg/Register.tsx b/src/routes/reg/Register.tsx index 64fba115..500df7f2 100644 --- a/src/routes/reg/Register.tsx +++ b/src/routes/reg/Register.tsx @@ -6,12 +6,10 @@ import Button from "../../common/component/styled/Button"; import { useLazyCheckEmailQuery, useSendRegMagicLinkMutation } from "../../app/services/auth"; import EmailNextTip from "./EmailNextStepTip"; import SignInLink from "./SignInLink"; -import { useGetLoginConfigQuery } from "../../app/services/server"; -import useGithubAuthConfig from "../../common/hook/useGithubAuthConfig"; -import useGoogleAuthConfig from "../../common/hook/useGoogleAuthConfig"; -import GoogleLoginButton from "../../common/component/GoogleLoginButton"; -import GithubLoginButton from "../../common/component/GithubLoginButton"; + import { useTranslation } from "react-i18next"; +import { useGetLoginConfigQuery } from "../../app/services/server"; +import SocialLoginButtons from "../login/SocialLoginButtons"; interface AuthForm { email: string; @@ -24,6 +22,8 @@ export default function Reg() { const [sendRegMagicLink, { isLoading: signingUp, data, isSuccess }] = useSendRegMagicLinkMutation(); const [checkEmail, { isLoading: checkingEmail }] = useLazyCheckEmailQuery(); + const { data: loginConfig, isSuccess: loginConfigSuccess } = useGetLoginConfigQuery(); + // const navigateTo = useNavigate(); const [magicToken, setMagicToken] = useState(""); const [input, setInput] = useState({ @@ -87,17 +87,10 @@ export default function Reg() { return { ...prev }; }); }; - - const { clientId } = useGoogleAuthConfig(); - const { config: githubAuthConfig } = useGithubAuthConfig(); - const { data: loginConfig, isSuccess: loginConfigSuccess } = useGetLoginConfigQuery(); if (!loginConfigSuccess) return null; const { - github: enableGithubLogin, - google: enableGoogleLogin, who_can_sign_up: whoCanSignUp } = loginConfig; - const googleLogin = enableGoogleLogin && clientId; // magic token 没有并且没有开放注册 if (whoCanSignUp !== "EveryOne" && !magicToken) // todo: i18n @@ -153,11 +146,8 @@ export default function Reg() {
-
- {googleLogin && } - {enableGithubLogin && ( - - )} +
+
diff --git a/src/routes/sendMagicLink/index.tsx b/src/routes/sendMagicLink/index.tsx index 4f3f4eb7..1438cf9a 100644 --- a/src/routes/sendMagicLink/index.tsx +++ b/src/routes/sendMagicLink/index.tsx @@ -8,6 +8,7 @@ import Button from "../../common/component/styled/Button"; import { useSendLoginMagicLinkMutation } from "../../app/services/auth"; import SentTip from "./SentTip"; import { useTranslation } from "react-i18next"; +import SocialLoginButtons from "../login/SocialLoginButtons"; export default function SendMagicLinkPage() { const { t } = useTranslation("auth"); @@ -91,6 +92,9 @@ export default function SendMagicLinkPage() {
+
+ +
)}