Fixing team creation flow and switching from bootstrap to react bootstrap (#3408)

Этот коммит содержится в:
Asaad Mahmood
2016-06-24 19:05:45 +05:00
коммит произвёл Harrison Healey
родитель 9e044e8339
Коммит afce6e6e78
2 изменённых файлов: 46 добавлений и 28 удалений

Просмотреть файл

@@ -1,8 +1,6 @@
// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
// See License.txt for license information. // See License.txt for license information.
import $ from 'jquery';
import * as Utils from 'utils/utils.jsx'; import * as Utils from 'utils/utils.jsx';
import {checkIfTeamExists, createTeam} from 'actions/team_actions.jsx'; import {checkIfTeamExists, createTeam} from 'actions/team_actions.jsx';
@@ -13,6 +11,7 @@ import logoImage from 'images/logo.png';
import React from 'react'; import React from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import {Button, Tooltip, OverlayTrigger} from 'react-bootstrap';
import {FormattedMessage, FormattedHTMLMessage} from 'react-intl'; import {FormattedMessage, FormattedHTMLMessage} from 'react-intl';
export default class TeamUrl extends React.Component { export default class TeamUrl extends React.Component {
@@ -23,7 +22,10 @@ export default class TeamUrl extends React.Component {
this.submitNext = this.submitNext.bind(this); this.submitNext = this.submitNext.bind(this);
this.handleFocus = this.handleFocus.bind(this); this.handleFocus = this.handleFocus.bind(this);
this.state = {nameError: ''}; this.state = {
nameError: '',
isLoading: false
};
} }
submitBack(e) { submitBack(e) {
e.preventDefault(); e.preventDefault();
@@ -59,7 +61,7 @@ export default class TeamUrl extends React.Component {
} }
} }
$('#finish-button').button('loading'); this.setState({isLoading: true});
var teamSignup = JSON.parse(JSON.stringify(this.props.state)); var teamSignup = JSON.parse(JSON.stringify(this.props.state));
teamSignup.team.type = 'O'; teamSignup.team.type = 'O';
teamSignup.team.name = name; teamSignup.team.name = name;
@@ -68,37 +70,32 @@ export default class TeamUrl extends React.Component {
(foundTeam) => { (foundTeam) => {
if (foundTeam) { if (foundTeam) {
this.setState({nameError: Utils.localizeMessage('create_team.team_url.unavailable', 'This URL is unavailable. Please try another.')}); this.setState({nameError: Utils.localizeMessage('create_team.team_url.unavailable', 'This URL is unavailable. Please try another.')});
$('#finish-button').button('reset'); this.setState({isLoading: false});
return; return;
} }
createTeam(teamSignup.team, createTeam(teamSignup.team,
() => { () => {
track('signup', 'signup_team_08_complete'); track('signup', 'signup_team_08_complete');
$('#sign-up-button').button('reset');
}, },
(err) => { (err) => {
this.setState({nameError: err.message}); this.setState({nameError: err.message});
$('#finish-button').button('reset'); this.setState({isLoading: false});
} }
); );
}, },
(err) => { (err) => {
this.setState({nameError: err.message}); this.setState({nameError: err.message});
$('#finish-button').button('reset');
} }
); );
} }
handleFocus(e) { handleFocus(e) {
e.preventDefault(); e.preventDefault();
e.currentTarget.select(); e.currentTarget.select();
} }
render() { render() {
$('body').tooltip({selector: '[data-toggle=tooltip]', trigger: 'hover click'});
track('signup', 'signup_team_03_url'); track('signup', 'signup_team_03_url');
let nameError = null; let nameError = null;
@@ -109,6 +106,25 @@ export default class TeamUrl extends React.Component {
} }
const title = `${Utils.getWindowLocationOrigin()}/`; const title = `${Utils.getWindowLocationOrigin()}/`;
const urlTooltip = (
<Tooltip id='urlTooltip'>{title}</Tooltip>
);
let finishMessage = (
<FormattedMessage
id='create_team.team_url.finish'
defaultMessage='Finish'
/>
);
if (this.state.isLoading) {
finishMessage = (
<FormattedMessage
id='create_team.team_url.creatingTeam'
defaultMessage='Creating team...'
/>
);
}
return ( return (
<div> <div>
@@ -127,13 +143,15 @@ export default class TeamUrl extends React.Component {
<div className='row'> <div className='row'>
<div className='col-sm-11'> <div className='col-sm-11'>
<div className='input-group input-group--limit'> <div className='input-group input-group--limit'>
<span <OverlayTrigger
data-toggle='tooltip' delayShow={Constants.OVERLAY_TIME_DELAY}
title={title} placement='top'
className='input-group-addon' overlay={urlTooltip}
> >
{title} <span className='input-group-addon'>
</span> {title}
</span>
</OverlayTrigger>
<input <input
type='text' type='text'
ref='name' ref='name'
@@ -164,17 +182,16 @@ export default class TeamUrl extends React.Component {
<li>Must start with a letter and can't end in a dash</li>" <li>Must start with a letter and can't end in a dash</li>"
/> />
</ul> </ul>
<button <div className='margin--extra'>
type='submit' <Button
id='finish-button' type='submit'
className='btn btn-primary margin--extra' bsStyle='primary'
onClick={this.submitNext} disabled={this.state.isLoading}
> onClick={this.submitNext}
<FormattedMessage >
id='create_team.team_url.finish' {finishMessage}
defaultMessage='Finish' </Button>
/> </div>
</button>
<div className='margin--extra'> <div className='margin--extra'>
<a <a
href='#' href='#'

Просмотреть файл

@@ -839,6 +839,7 @@
"create_team.team_url.back": "Back to previous step", "create_team.team_url.back": "Back to previous step",
"create_team.team_url.charLength": "Name must be 4 or more characters up to a maximum of 15", "create_team.team_url.charLength": "Name must be 4 or more characters up to a maximum of 15",
"create_team.team_url.finish": "Finish", "create_team.team_url.finish": "Finish",
"create_team.team_url.creatingTeam": "Creating team...",
"create_team.team_url.hint": "<li>Short and memorable is best</li><li>Use lowercase letters, numbers and dashes</li><li>Must start with a letter and can't end in a dash</li>", "create_team.team_url.hint": "<li>Short and memorable is best</li><li>Use lowercase letters, numbers and dashes</li><li>Must start with a letter and can't end in a dash</li>",
"create_team.team_url.regex": "Use only lower case letters, numbers and dashes. Must start with a letter and can't end in a dash.", "create_team.team_url.regex": "Use only lower case letters, numbers and dashes. Must start with a letter and can't end in a dash.",
"create_team.team_url.required": "This field is required", "create_team.team_url.required": "This field is required",