// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import * as Utils from '../utils/utils.jsx'; import * as Client from '../utils/client.jsx'; import BrowserStore from '../stores/browser_store.jsx'; import {injectIntl, intlShape, defineMessages, FormattedMessage, FormattedHTMLMessage} from 'mm-intl'; const holders = defineMessages({ storageError: { id: 'team_signup_welcome.storageError', defaultMessage: 'This service requires local storage to be enabled. Please enable it or exit private browsing.' }, validEmailError: { id: 'team_signup_welcome.validEmailError', defaultMessage: 'Please enter a valid email address' }, address: { id: 'team_signup_welcome.address', defaultMessage: 'Email Address' } }); class TeamSignupWelcomePage extends React.Component { constructor(props) { super(props); this.submitNext = this.submitNext.bind(this); this.handleDiffEmail = this.handleDiffEmail.bind(this); this.handleDiffSubmit = this.handleDiffSubmit.bind(this); this.handleKeyPress = this.handleKeyPress.bind(this); this.state = {useDiff: false}; document.addEventListener('keyup', this.handleKeyPress, false); } submitNext(e) { if (!BrowserStore.isLocalStorageSupported()) { this.setState({storageError: this.props.intl.formatMessage(holders.storageError)}); return; } e.preventDefault(); this.props.state.wizard = 'team_display_name'; this.props.updateParent(this.props.state); } handleDiffEmail(e) { e.preventDefault(); this.setState({useDiff: true}); } handleDiffSubmit(e) { e.preventDefault(); const {formatMessage} = this.props.intl; var state = {useDiff: true, serverError: ''}; var email = ReactDOM.findDOMNode(this.refs.email).value.trim().toLowerCase(); if (!email || !Utils.isEmail(email)) { state.emailError = formatMessage(holders.validEmailError); this.setState(state); return; } else if (!BrowserStore.isLocalStorageSupported()) { state.emailError = formatMessage(holders.storageError); this.setState(state); return; } state.emailError = ''; Client.signupTeam(email, function success(data) { if (data.follow_link) { window.location.href = data.follow_link; } else { this.props.state.wizard = 'finished'; this.props.updateParent(this.props.state); window.location.href = '/signup_team_confirm/?email=' + encodeURIComponent(email); } }.bind(this), function error(err) { let errorMsg = err.message; if (err.detailed_error.indexOf('Invalid RCPT TO address provided') >= 0) { errorMsg = formatMessage(holders.validEmailError); } this.setState({emailError: '', serverError: errorMsg}); }.bind(this) ); } handleKeyPress(event) { if (event.keyCode === 13) { this.submitNext(event); } } componentWillUnmount() { document.removeEventListener('keyup', this.handleKeyPress, false); } render() { Client.track('signup', 'signup_team_01_welcome'); var storageError = null; if (this.state.storageError) { storageError = ; } var emailError = null; var emailDivClass = 'form-group'; if (this.state.emailError) { emailError = ; emailDivClass += ' has-error'; } var serverError = null; if (this.state.serverError) { serverError = (
); } var differentEmailLinkClass = ''; var emailDivContainerClass = 'hidden'; if (this.state.useDiff) { differentEmailLinkClass = 'hidden'; emailDivContainerClass = ''; } return (

{global.window.mm_config.SiteName}


{this.props.state.team.email}

{storageError}

{emailError}
{serverError}
); } } TeamSignupWelcomePage.defaultProps = { state: {} }; TeamSignupWelcomePage.propTypes = { intl: intlShape.isRequired, updateParent: React.PropTypes.func.isRequired, state: React.PropTypes.object }; export default injectIntl(TeamSignupWelcomePage);