From 097adac871f1b4746855beb8aaa38d194c85e3df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=83=E7=9F=B3?= Date: Wed, 25 Sep 2024 12:48:37 +0800 Subject: [PATCH] feat: support single-choice and multi-choices in signup page (#3234) * feat: add custom signup field * feat: support more field in signup page * feat: support more field in signup page * feat: support more field in signup page * feat: Reduce code duplication in form item rendering * feat: Simplify gender and info checks using includes * feat: update translate * Revert "feat: update translate" This reverts commit 669334c716cdfe016c67c2b4dbaf5458c3d5e93b. * feat: address feedback from hsluoyz --- controllers/account.go | 4 +++ form/auth.go | 4 +++ object/application.go | 2 +- web/src/auth/SignupPage.js | 58 ++++++++++++++++++++++++++++++++++-- web/src/table/SignupTable.js | 4 +++ 5 files changed, 68 insertions(+), 4 deletions(-) diff --git a/controllers/account.go b/controllers/account.go index 29696516..a0939b0c 100644 --- a/controllers/account.go +++ b/controllers/account.go @@ -200,6 +200,10 @@ func (c *ApiController) Signup() { Type: userType, Password: authForm.Password, DisplayName: authForm.Name, + Gender: authForm.Gender, + Bio: authForm.Bio, + Tag: authForm.Tag, + Education: authForm.Education, Avatar: organization.DefaultAvatar, Email: authForm.Email, Phone: authForm.Phone, diff --git a/form/auth.go b/form/auth.go index 86df5980..ca704223 100644 --- a/form/auth.go +++ b/form/auth.go @@ -26,6 +26,10 @@ type AuthForm struct { Name string `json:"name"` FirstName string `json:"firstName"` LastName string `json:"lastName"` + Gender string `json:"gender"` + Bio string `json:"bio"` + Tag string `json:"tag"` + Education string `json:"education"` Email string `json:"email"` Phone string `json:"phone"` Affiliation string `json:"affiliation"` diff --git a/object/application.go b/object/application.go index 53037dfa..8915886d 100644 --- a/object/application.go +++ b/object/application.go @@ -87,7 +87,7 @@ type Application struct { SamlReplyUrl string `xorm:"varchar(100)" json:"samlReplyUrl"` Providers []*ProviderItem `xorm:"mediumtext" json:"providers"` SigninMethods []*SigninMethod `xorm:"varchar(2000)" json:"signinMethods"` - SignupItems []*SignupItem `xorm:"varchar(2000)" json:"signupItems"` + SignupItems []*SignupItem `xorm:"varchar(3000)" json:"signupItems"` SigninItems []*SigninItem `xorm:"mediumtext" json:"signinItems"` GrantTypes []string `xorm:"varchar(1000)" json:"grantTypes"` OrganizationObj *Organization `xorm:"-" json:"organizationObj"` diff --git a/web/src/auth/SignupPage.js b/web/src/auth/SignupPage.js index 8d6b3d8c..a49dc4fe 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, Radio, Result, Row, message} from "antd"; +import {Button, Form, Input, Radio, Result, Row, Select, message} from "antd"; import * as Setting from "../Setting"; import * as AuthBackend from "./AuthBackend"; import * as ProviderButton from "./ProviderButton"; @@ -50,6 +50,38 @@ const formItemLayout = { }, }; +const renderFormItem = (signupItem) => { + const commonProps = { + name: signupItem.name.toLowerCase(), + label: signupItem.label || signupItem.name, + rules: [ + { + required: signupItem.required, + message: i18next.t(`signup:Please input your ${signupItem.label || signupItem.name}!`), + }, + ], + }; + + if (!signupItem.type || signupItem.type === "Input") { + return ( + + + + ); + } else if (signupItem.type === "Single Choice" || signupItem.type === "Multiple Choices") { + return ( + +