Add simple validation for Name and URL in the settings page
This commit is contained in:
@@ -23,6 +23,7 @@ Release date: TBD
|
|||||||
- Added back/forward features for the current tab.
|
- Added back/forward features for the current tab.
|
||||||
- Windows and Linux: Alt+Left, Alt+Right
|
- Windows and Linux: Alt+Left, Alt+Right
|
||||||
- OS X: Command+[, Command+]
|
- OS X: Command+[, Command+]
|
||||||
|
- Added simple validation for Name and URL in the settings page.
|
||||||
|
|
||||||
#### Windows
|
#### Windows
|
||||||
- Added an option to toogle the red dot icon for unread messages (default is on).
|
- Added an option to toogle the red dot icon for unread messages (default is on).
|
||||||
|
@@ -9,17 +9,9 @@ const settings = require('../common/settings');
|
|||||||
|
|
||||||
const React = require('react');
|
const React = require('react');
|
||||||
const ReactDOM = require('react-dom');
|
const ReactDOM = require('react-dom');
|
||||||
const ReactBootstrap = require('react-bootstrap');
|
const {Grid, Row, Col, Input, Button, ListGroup, ListGroupItem, Glyphicon, HelpBlock} = require('react-bootstrap');
|
||||||
var AutoLaunch = require('auto-launch');
|
var AutoLaunch = require('auto-launch');
|
||||||
|
|
||||||
const Grid = ReactBootstrap.Grid;
|
|
||||||
const Row = ReactBootstrap.Row;
|
|
||||||
const Col = ReactBootstrap.Col;
|
|
||||||
const Input = ReactBootstrap.Input;
|
|
||||||
const Button = ReactBootstrap.Button;
|
|
||||||
const ListGroup = ReactBootstrap.ListGroup;
|
|
||||||
const ListGroupItem = ReactBootstrap.ListGroupItem;
|
|
||||||
const Glyphicon = ReactBootstrap.Glyphicon;
|
|
||||||
|
|
||||||
var appLauncher = new AutoLaunch({
|
var appLauncher = new AutoLaunch({
|
||||||
name: 'Mattermost'
|
name: 'Mattermost'
|
||||||
@@ -406,12 +398,21 @@ var TeamListItemNew = React.createClass({
|
|||||||
return {
|
return {
|
||||||
name: this.props.teamName,
|
name: this.props.teamName,
|
||||||
url: this.props.teamUrl,
|
url: this.props.teamUrl,
|
||||||
index: this.props.teamIndex
|
index: this.props.teamIndex,
|
||||||
|
errorMessage: null
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
handleSubmit: function(e) {
|
handleSubmit: function(e) {
|
||||||
console.log('submit');
|
console.log('submit');
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
const errorMessage = this.getValidationErrorMessage();
|
||||||
|
if (errorMessage) {
|
||||||
|
this.setState({
|
||||||
|
errorMessage
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
this.props.onTeamAdd({
|
this.props.onTeamAdd({
|
||||||
name: this.state.name.trim(),
|
name: this.state.name.trim(),
|
||||||
url: this.state.url.trim(),
|
url: this.state.url.trim(),
|
||||||
@@ -421,7 +422,8 @@ var TeamListItemNew = React.createClass({
|
|||||||
this.setState({
|
this.setState({
|
||||||
name: '',
|
name: '',
|
||||||
url: '',
|
url: '',
|
||||||
index: ''
|
index: '',
|
||||||
|
errorMessage: null
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
handleNameChange: function(e) {
|
handleNameChange: function(e) {
|
||||||
@@ -436,10 +438,30 @@ var TeamListItemNew = React.createClass({
|
|||||||
url: e.target.value
|
url: e.target.value
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
shouldEnableAddButton: function() {
|
|
||||||
return (this.state.name.trim() !== '' || this.props.teamName !== '')
|
getValidationErrorMessage: function() {
|
||||||
&& (this.state.url.trim() !== '' || this.props.teamUrl !== '');
|
if (this.state.name.trim() === '') {
|
||||||
|
return 'Name is required.';
|
||||||
|
} else if (this.state.url.trim() === '') {
|
||||||
|
return 'URL is required.';
|
||||||
|
} else if (!(/^https?:\/\/.*/).test(this.state.url.trim())) {
|
||||||
|
return 'URL should start with http:// or https://.';
|
||||||
|
}
|
||||||
|
return null;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
componentDidMount: function() {
|
||||||
|
const inputTeamName = ReactDOM.findDOMNode(this.refs.inputTeamName);
|
||||||
|
const setErrorMessage = () => {
|
||||||
|
this.setState({
|
||||||
|
errorMessage: this.getValidationErrorMessage()
|
||||||
|
});
|
||||||
|
};
|
||||||
|
inputTeamName.addEventListener('invalid', setErrorMessage);
|
||||||
|
const inputTeamURL = ReactDOM.findDOMNode(this.refs.inputTeamURL);
|
||||||
|
inputTeamURL.addEventListener('invalid', setErrorMessage);
|
||||||
|
},
|
||||||
|
|
||||||
render: function() {
|
render: function() {
|
||||||
|
|
||||||
var existingTeam = false;
|
var existingTeam = false;
|
||||||
@@ -460,19 +482,29 @@ var TeamListItemNew = React.createClass({
|
|||||||
<div className="form-group">
|
<div className="form-group">
|
||||||
<label for="inputTeamName">Name</label>
|
<label for="inputTeamName">Name</label>
|
||||||
{ ' ' }
|
{ ' ' }
|
||||||
<input type="text" className="form-control" id="inputTeamName" placeholder="Example team" value={ this.state.name } onChange={ this.handleNameChange } />
|
<input type="text" required className="form-control" id="inputTeamName" ref="inputTeamName" placeholder="Example team" value={ this.state.name } onChange={ this.handleNameChange }
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
{ ' ' }
|
{ ' ' }
|
||||||
<div className="form-group">
|
<div className="form-group">
|
||||||
<label for="inputTeamURL">URL</label>
|
<label for="inputTeamURL">URL</label>
|
||||||
{ ' ' }
|
{ ' ' }
|
||||||
<input type="url" className="form-control" id="inputTeamURL" placeholder="https://example.com/team" value={ this.state.url } onChange={ this.handleURLChange } />
|
<input type="url" required className="form-control" id="inputTeamURL" ref="inputTeamURL" placeholder="https://example.com/team" value={ this.state.url } onChange={ this.handleURLChange }
|
||||||
|
/>
|
||||||
</div>
|
</div>
|
||||||
{ ' ' }
|
{ ' ' }
|
||||||
<Button type="submit" disabled={ !this.shouldEnableAddButton() }>
|
<Button type="submit">
|
||||||
{ btnAddText }
|
{ btnAddText }
|
||||||
</Button>
|
</Button>
|
||||||
</form>
|
</form>
|
||||||
|
{ (() => {
|
||||||
|
if (this.state.errorMessage !== null) {
|
||||||
|
return (<HelpBlock style={ { color: '#777777' } }>
|
||||||
|
{ this.state.errorMessage }
|
||||||
|
</HelpBlock>);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
})() }
|
||||||
</ListGroupItem>
|
</ListGroupItem>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user