From f95ce13b82bbec81aa691812d526fb58a5900d27 Mon Sep 17 00:00:00 2001 From: Yang Luo Date: Fri, 29 Mar 2024 09:07:37 +0800 Subject: [PATCH] fix: support "Email or Phone" in signup table --- controllers/cert.go | 2 +- web/src/auth/SignupPage.js | 281 ++++++++++++++++++++--------------- web/src/table/SignupTable.js | 4 +- 3 files changed, 168 insertions(+), 119 deletions(-) diff --git a/controllers/cert.go b/controllers/cert.go index 1a7508a9..075406af 100644 --- a/controllers/cert.go +++ b/controllers/cert.go @@ -68,7 +68,7 @@ func (c *ApiController) GetCerts() { // GetGlobalCerts // @Title GetGlobalCerts // @Tag Cert API -// @Description get globle certs +// @Description get global certs // @Success 200 {array} object.Cert The Response object // @router /get-global-certs [get] func (c *ApiController) GetGlobalCerts() { diff --git a/web/src/auth/SignupPage.js b/web/src/auth/SignupPage.js index a641601a..d89ef902 100644 --- a/web/src/auth/SignupPage.js +++ b/web/src/auth/SignupPage.js @@ -13,7 +13,7 @@ // limitations under the License. import React from "react"; -import {Button, Form, Input, Result} from "antd"; +import {Button, Form, Input, Radio, Result, Row} from "antd"; import * as Setting from "../Setting"; import * as AuthBackend from "./AuthBackend"; import * as ProviderButton from "./ProviderButton"; @@ -71,6 +71,7 @@ class SignupPage extends React.Component { applicationName: (props.applicationName ?? props.match?.params?.applicationName) ?? null, email: "", phone: "", + emailOrPhoneMode: "", countryCode: "", emailCode: "", phoneCode: "", @@ -360,130 +361,176 @@ class SignupPage extends React.Component { {this.setState({region: value});}} /> ); - } else if (signupItem.name === "Email") { - return ( - - { - if (this.state.email !== "" && !Setting.isValidEmail(this.state.email)) { - this.setState({validEmail: false}); - return Promise.reject(i18next.t("signup:The input is not valid Email!")); - } - - this.setState({validEmail: true}); - return Promise.resolve(); - }, - }, - ]} - > - this.setState({email: e.target.value})} /> - - { - signupItem.rule !== "No verification" && + } else if (signupItem.name === "Email" || signupItem.name === "Phone" || signupItem.name === "Email or Phone" || signupItem.name === "Phone or Email") { + const renderEmailItem = () => { + return ( + - - - } - - ); - } else if (signupItem.name === "Phone") { - return ( - - - - - - - ({ - validator: (_, value) => { - if (!required && !value) { - return Promise.resolve(); - } - - if (value && !Setting.isValidPhone(value, getFieldValue("countryCode"))) { - this.setState({validPhone: false}); - return Promise.reject(i18next.t("signup:The input is not valid Phone!")); - } - - this.setState({validPhone: true}); - return Promise.resolve(); - }, - }), - ]} - > - this.setState({phone: e.target.value})} - /> - - - - { - signupItem.rule !== "No verification" && - { + if (this.state.email !== "" && !Setting.isValidEmail(this.state.email)) { + this.setState({validEmail: false}); + return Promise.reject(i18next.t("signup:The input is not valid Email!")); + } + + this.setState({validEmail: true}); + return Promise.resolve(); + }, }, ]} > - + this.setState({email: e.target.value})} /> - } - - ); + { + signupItem.rule !== "No verification" && + + + + } + + ); + }; + + const renderPhoneItem = () => { + return ( + + + + + + + ({ + validator: (_, value) => { + if (!required && !value) { + return Promise.resolve(); + } + + if (value && !Setting.isValidPhone(value, getFieldValue("countryCode"))) { + this.setState({validPhone: false}); + return Promise.reject(i18next.t("signup:The input is not valid Phone!")); + } + + this.setState({validPhone: true}); + return Promise.resolve(); + }, + }), + ]} + > + this.setState({phone: e.target.value})} + /> + + + + { + signupItem.rule !== "No verification" && + + + + } + + ); + }; + + if (signupItem.name === "Email") { + return renderEmailItem(); + } else if (signupItem.name === "Phone") { + return renderPhoneItem(); + } else if (signupItem.name === "Email or Phone" || signupItem.name === "Phone or Email") { + let emailOrPhoneMode = this.state.emailOrPhoneMode; + if (emailOrPhoneMode === "") { + emailOrPhoneMode = signupItem.name === "Email or Phone" ? "Email" : "Phone"; + } + + return ( + + + { + this.setState({ + emailOrPhoneMode: e.target.value, + }); + }} value={emailOrPhoneMode}> + { + signupItem.name === "Email or Phone" ? ( + + {i18next.t("general:Email")} + {i18next.t("general:Phone")} + + ) : ( + + {i18next.t("general:Phone")} + {i18next.t("general:Email")} + + ) + } + + + { + emailOrPhoneMode === "Email" ? renderEmailItem() : renderPhoneItem() + } + + ); + } else { + return null; + } } else if (signupItem.name === "Password") { return (