updates to sign-up flow, remove company name and marketing checkbox
Этот коммит содержится в:
@@ -35,25 +35,18 @@ func signupTeam(c *Context, w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
m := model.MapFromJson(r.Body)
|
||||
email := strings.ToLower(strings.TrimSpace(m["email"]))
|
||||
displayName := strings.TrimSpace(m["display_name"])
|
||||
|
||||
if len(email) == 0 {
|
||||
c.SetInvalidParam("signupTeam", "email")
|
||||
return
|
||||
}
|
||||
|
||||
if len(displayName) == 0 {
|
||||
c.SetInvalidParam("signupTeam", "display_name")
|
||||
return
|
||||
}
|
||||
|
||||
subjectPage := NewServerTemplatePage("signup_team_subject", c.GetSiteURL())
|
||||
bodyPage := NewServerTemplatePage("signup_team_body", c.GetSiteURL())
|
||||
bodyPage.Props["TourUrl"] = utils.Cfg.TeamSettings.TourLink
|
||||
|
||||
props := make(map[string]string)
|
||||
props["email"] = email
|
||||
props["display_name"] = displayName
|
||||
props["time"] = fmt.Sprintf("%v", model.GetMillis())
|
||||
|
||||
data := model.MapToJson(props)
|
||||
|
||||
@@ -20,21 +20,12 @@ module.exports = React.createClass({
|
||||
state.email_error = "";
|
||||
}
|
||||
|
||||
team.display_name = this.refs.name.getDOMNode().value.trim();
|
||||
if (!team.display_name) {
|
||||
state.name_error = "This field is required";
|
||||
state.inValid = true;
|
||||
}
|
||||
else {
|
||||
state.name_error = "";
|
||||
}
|
||||
|
||||
if (state.inValid) {
|
||||
this.setState(state);
|
||||
return;
|
||||
}
|
||||
|
||||
client.signupTeam(team.email, team.display_name,
|
||||
client.signupTeam(team.email,
|
||||
function(data) {
|
||||
if (data["follow_link"]) {
|
||||
window.location.href = data["follow_link"];
|
||||
@@ -55,7 +46,6 @@ module.exports = React.createClass({
|
||||
render: function() {
|
||||
|
||||
var email_error = this.state.email_error ? <label className='control-label'>{ this.state.email_error }</label> : null;
|
||||
var name_error = this.state.name_error ? <label className='control-label'>{ this.state.name_error }</label> : null;
|
||||
var server_error = this.state.server_error ? <div className={ "form-group has-error" }><label className='control-label'>{ this.state.server_error }</label></div> : null;
|
||||
|
||||
return (
|
||||
@@ -64,10 +54,6 @@ module.exports = React.createClass({
|
||||
<input autoFocus={true} type="email" ref="email" className="form-control" placeholder="Email Address" maxLength="128" />
|
||||
{ email_error }
|
||||
</div>
|
||||
<div className={ name_error ? "form-group has-error" : "form-group" }>
|
||||
<input type="text" ref="name" className="form-control" placeholder={utils.toTitleCase(strings.Company) + " Name"} maxLength="64" />
|
||||
{ name_error }
|
||||
</div>
|
||||
{ server_error }
|
||||
<div className="form-group">
|
||||
<button className="btn btn-md btn-primary" type="submit">Sign up</button>
|
||||
|
||||
@@ -134,6 +134,7 @@ TeamDisplayNamePage = React.createClass({
|
||||
|
||||
this.props.state.wizard = "team_url";
|
||||
this.props.state.team.display_name = display_name;
|
||||
this.props.state.team.name = utils.cleanUpUrlable(display_name);
|
||||
this.props.updateParent(this.props.state);
|
||||
},
|
||||
getInitialState: function() {
|
||||
@@ -563,15 +564,15 @@ PasswordPage = React.createClass({
|
||||
|
||||
var password = this.refs.password.getDOMNode().value.trim();
|
||||
if (!password || password.length < 5) {
|
||||
this.setState({name_error: "Please enter at least 5 characters"});
|
||||
this.setState({password_error: "Please enter at least 5 characters"});
|
||||
return;
|
||||
}
|
||||
|
||||
this.setState({name_error: ""});
|
||||
this.setState({password_error: null, server_error: null});
|
||||
$('#finish-button').button('loading');
|
||||
var teamSignup = JSON.parse(JSON.stringify(this.props.state));
|
||||
teamSignup.user.password = password;
|
||||
teamSignup.user.allow_marketing = this.refs.email_service.getDOMNode().checked;
|
||||
teamSignup.user.allow_marketing = true;
|
||||
delete teamSignup.wizard;
|
||||
var ctl = this;
|
||||
|
||||
@@ -603,7 +604,7 @@ PasswordPage = React.createClass({
|
||||
}, 5000);
|
||||
}.bind(this),
|
||||
function(err) {
|
||||
this.setState({name_error: err.message});
|
||||
this.setState({server_error: err.message});
|
||||
$('#sign-up-button').button('reset');
|
||||
}.bind(this)
|
||||
);
|
||||
@@ -615,7 +616,8 @@ PasswordPage = React.createClass({
|
||||
|
||||
client.track('signup', 'signup_team_07_password');
|
||||
|
||||
var name_error = this.state.name_error ? <label className="control-label">{ this.state.name_error }</label> : null;
|
||||
var password_error = this.state.password_error ? <label className="control-label">{ this.state.password_error }</label> : null;
|
||||
var server_error = this.state.server_error ? <label className="control-label">{ this.state.server_error }</label> : null;
|
||||
|
||||
return (
|
||||
<div>
|
||||
@@ -626,7 +628,7 @@ PasswordPage = React.createClass({
|
||||
<div className="inner__content margin--extra">
|
||||
<h5><strong>Email</strong></h5>
|
||||
<div className="block--gray form-group">{this.props.state.team.email}</div>
|
||||
<div className={ name_error ? "form-group has-error" : "form-group" }>
|
||||
<div className={ password_error ? "form-group has-error" : "form-group" }>
|
||||
<div className="row">
|
||||
<div className="col-sm-11">
|
||||
<h5><strong>Choose your password</strong></h5>
|
||||
@@ -634,12 +636,10 @@ PasswordPage = React.createClass({
|
||||
<div className="color--light form__hint">Passwords must contain 5 to 50 characters. Your password will be strongest if it contains a mix of symbols, numbers, and upper and lowercase characters.</div>
|
||||
</div>
|
||||
</div>
|
||||
{ name_error }
|
||||
{ password_error }
|
||||
{ server_error }
|
||||
</div>
|
||||
</div>
|
||||
<div className="form-group checkbox">
|
||||
<label><input type="checkbox" ref="email_service" /> It's ok to send me occassional email with updates about the {config.SiteName} service.</label>
|
||||
</div>
|
||||
<div className="form-group">
|
||||
<button type="submit" className="btn btn-primary margin--extra" id="finish-button" data-loading-text={"<span class='glyphicon glyphicon-refresh glyphicon-refresh-animate'></span> Creating "+strings.Team+"..."} onClick={this.submitNext}>Finish</button>
|
||||
</div>
|
||||
@@ -669,9 +669,6 @@ module.exports = React.createClass({
|
||||
props.wizard = "welcome";
|
||||
props.team = {};
|
||||
props.team.email = this.props.email;
|
||||
props.team.display_name = this.props.name;
|
||||
props.team.company_name = this.props.name;
|
||||
props.team.name = utils.cleanUpUrlable(this.props.name);
|
||||
props.team.allowed_domains = "";
|
||||
props.invites = [];
|
||||
props.invites.push("");
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
|
||||
var SignupTeamComplete =require('../components/signup_team_complete.jsx');
|
||||
|
||||
global.window.setup_signup_team_complete_page = function(email, name, data, hash) {
|
||||
global.window.setup_signup_team_complete_page = function(email, data, hash) {
|
||||
React.render(
|
||||
<SignupTeamComplete name={name} email={email} hash={hash} data={data}/>,
|
||||
<SignupTeamComplete email={email} hash={hash} data={data}/>,
|
||||
document.getElementById('signup-team-complete')
|
||||
);
|
||||
};
|
||||
|
||||
@@ -341,13 +341,13 @@ module.exports.updateTeamDisplayName = function(data, success, error) {
|
||||
module.exports.track('api', 'api_teams_update_name');
|
||||
};
|
||||
|
||||
module.exports.signupTeam = function(email, display_name, success, error) {
|
||||
module.exports.signupTeam = function(email, success, error) {
|
||||
$.ajax({
|
||||
url: "/api/v1/teams/signup",
|
||||
dataType: 'json',
|
||||
contentType: 'application/json',
|
||||
type: 'POST',
|
||||
data: JSON.stringify({email: email, display_name: display_name}),
|
||||
data: JSON.stringify({email: email}),
|
||||
success: success,
|
||||
error: function(xhr, status, err) {
|
||||
e = handleError("singupTeam", xhr, status, err);
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
window.setup_signup_team_complete_page('{{.Props.Email}}', '{{.Props.DisplayName}}', '{{.Props.Data}}', '{{.Props.Hash}}');
|
||||
window.setup_signup_team_complete_page('{{.Props.Email}}', '{{.Props.Data}}', '{{.Props.Hash}}');
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -219,7 +219,6 @@ func signupTeamComplete(c *api.Context, w http.ResponseWriter, r *http.Request)
|
||||
|
||||
page := NewHtmlTemplatePage("signup_team_complete", "Complete Team Sign Up")
|
||||
page.Props["Email"] = props["email"]
|
||||
page.Props["DisplayName"] = props["display_name"]
|
||||
page.Props["Data"] = data
|
||||
page.Props["Hash"] = hash
|
||||
page.Render(c, w)
|
||||
|
||||
Ссылка в новой задаче
Block a user