From 84c82e8d7a1a7e4ec8808b86ff5bea78138d1886 Mon Sep 17 00:00:00 2001 From: Reed Garmsen Date: Tue, 18 Aug 2015 09:15:16 -0700 Subject: Renamed new component files for easier identification --- web/react/components/team_signup_url_page.jsx | 119 ++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 web/react/components/team_signup_url_page.jsx (limited to 'web/react/components/team_signup_url_page.jsx') diff --git a/web/react/components/team_signup_url_page.jsx b/web/react/components/team_signup_url_page.jsx new file mode 100644 index 000000000..beef725e2 --- /dev/null +++ b/web/react/components/team_signup_url_page.jsx @@ -0,0 +1,119 @@ +// Copyright (c) 2015 Spinpunch, Inc. All Rights Reserved. +// See License.txt for license information. + +var utils = require('../utils/utils.jsx'); +var client = require('../utils/client.jsx'); +var constants = require('../utils/constants.jsx'); + +module.exports = React.createClass({ + displayName: 'TeamSignupURLPage', + propTypes: { + state: React.PropTypes.object, + updateParent: React.PropTypes.func + }, + submitBack: function(e) { + e.preventDefault(); + this.props.state.wizard = 'team_display_name'; + this.props.updateParent(this.props.state); + }, + submitNext: function(e) { + e.preventDefault(); + + var name = this.refs.name.getDOMNode().value.trim(); + if (!name) { + this.setState({nameError: 'This field is required'}); + return; + } + + var cleanedName = utils.cleanUpUrlable(name); + + var urlRegex = /^[a-z]+([a-z\-0-9]+|(__)?)[a-z0-9]+$/g; + if (cleanedName !== name || !urlRegex.test(name)) { + this.setState({nameError: "Use only lower case letters, numbers and dashes. Must start with a letter and can't end in a dash."}); + return; + } else if (cleanedName.length <= 3 || cleanedName.length > 15) { + this.setState({nameError: 'Name must be 4 or more characters up to a maximum of 15'}); + return; + } + + for (var index = 0; index < constants.RESERVED_TEAM_NAMES.length; index++) { + if (cleanedName.indexOf(constants.RESERVED_TEAM_NAMES[index]) === 0) { + this.setState({nameError: 'This team name is unavailable'}); + return; + } + } + + client.findTeamByName(name, + function success(data) { + if (!data) { + if (config.AllowSignupDomainsWizard) { + this.props.state.wizard = 'allowed_domains'; + } else { + this.props.state.wizard = 'send_invites'; + this.props.state.team.type = 'O'; + } + + this.props.state.team.name = name; + this.props.updateParent(this.props.state); + } else { + this.state.nameError = 'This URL is unavailable. Please try another.'; + this.setState(this.state); + } + }.bind(this), + function error(err) { + this.state.nameError = err.message; + this.setState(this.state); + }.bind(this) + ); + }, + getInitialState: function() { + return {}; + }, + handleFocus: function(e) { + e.preventDefault(); + + e.currentTarget.select(); + }, + render: function() { + $('body').tooltip({selector: '[data-toggle=tooltip]', trigger: 'hover click'}); + + client.track('signup', 'signup_team_03_url'); + + var nameError = null; + var nameDivClass = 'form-group'; + if (this.state.nameError) { + nameError = ; + nameDivClass += ' has-error'; + } + + return ( +
+
+ +

{utils.toTitleCase(strings.Team) + ' URL'}

+
+
+
+
+ {utils.getWindowLocationOrigin() + '/'} + +
+
+
+ {nameError} +
+

{'Choose the web address of your new ' + strings.Team + ':'}

+
    +
  • Short and memorable is best
  • +
  • Use lowercase letters, numbers and dashes
  • +
  • Must start with a letter and can't end in a dash
  • +
+ +
+ Back to previous step +
+
+
+ ); + } +}); -- cgit v1.2.3-1-g7c22