// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import {checkIfTeamExists, createTeam} from 'actions/team_actions.jsx'; import {trackEvent} from 'actions/diagnostics_actions.jsx'; import Constants from 'utils/constants.jsx'; import * as URL from 'utils/url.jsx'; import logoImage from 'images/logo.png'; import React from 'react'; import ReactDOM from 'react-dom'; import {Button, Tooltip, OverlayTrigger} from 'react-bootstrap'; import {FormattedMessage, FormattedHTMLMessage} from 'react-intl'; export default class TeamUrl extends React.Component { constructor(props) { super(props); this.submitBack = this.submitBack.bind(this); this.submitNext = this.submitNext.bind(this); this.handleFocus = this.handleFocus.bind(this); this.state = { nameError: '', isLoading: false }; } componentDidMount() { trackEvent('signup', 'signup_team_02_url'); } submitBack(e) { e.preventDefault(); this.props.state.wizard = 'display_name'; this.props.updateParent(this.props.state); } submitNext(e) { e.preventDefault(); const name = ReactDOM.findDOMNode(this.refs.name).value.trim(); const cleanedName = URL.cleanUpUrlable(name); const urlRegex = /^[a-z]+([a-z\-0-9]+|(__)?)[a-z0-9]+$/g; if (!name) { this.setState({nameError: ( ) }); return; } if (cleanedName.length < Constants.MIN_TEAMNAME_LENGTH || cleanedName.length > Constants.MAX_TEAMNAME_LENGTH) { this.setState({nameError: ( ) }); return; } if (cleanedName !== name || !urlRegex.test(name)) { this.setState({nameError: ( ) }); return; } for (let index = 0; index < Constants.RESERVED_TEAM_NAMES.length; index++) { if (cleanedName.indexOf(Constants.RESERVED_TEAM_NAMES[index]) === 0) { this.setState({nameError: ( ) }); return; } } this.setState({isLoading: true}); var teamSignup = JSON.parse(JSON.stringify(this.props.state)); teamSignup.team.type = 'O'; teamSignup.team.name = name; checkIfTeamExists(name, (foundTeam) => { if (foundTeam) { this.setState({nameError: ( ) }); this.setState({isLoading: false}); return; } createTeam(teamSignup.team, () => { trackEvent('signup', 'signup_team_03_complete'); }, (err) => { this.setState({nameError: err.message}); this.setState({isLoading: false}); } ); }, (err) => { this.setState({nameError: err.message}); } ); } handleFocus(e) { e.preventDefault(); e.currentTarget.select(); } render() { let nameError = null; let nameDivClass = 'form-group'; if (this.state.nameError) { nameError = ; nameDivClass += ' has-error'; } const title = `${URL.getSiteURL()}/`; const urlTooltip = ( {title} ); let finishMessage = ( ); if (this.state.isLoading) { finishMessage = ( ); } return (

{title}
{nameError}

); } } TeamUrl.propTypes = { state: React.PropTypes.object, updateParent: React.PropTypes.func };