|
|
@@ -4,42 +4,59 @@ import i18next from 'i18next';
|
|
|
import { translate } from 'react-i18next';
|
|
|
|
|
|
class InstallerForm extends React.Component {
|
|
|
+ constructor(props) {
|
|
|
+ super(props);
|
|
|
+
|
|
|
+ this.state = {
|
|
|
+ isValidUserName: true,
|
|
|
+ };
|
|
|
+ this.checkUserName = this.checkUserName.bind(this);
|
|
|
+ }
|
|
|
+
|
|
|
+ checkUserName(e) {
|
|
|
+ $.getJSON('/_api/check_username', {username: e.target.value}, function(json) {
|
|
|
+ this.setState({ isValidUserName: json.valid });
|
|
|
+ }.bind(this));
|
|
|
+ }
|
|
|
|
|
|
changeLanguage(locale) {
|
|
|
i18next.changeLanguage(locale);
|
|
|
}
|
|
|
|
|
|
render() {
|
|
|
+ const hasErrorClass = this.state.isValidUserName ? '' : ' has-error';
|
|
|
+ const unavailableUserId = this.state.isValidUserName ? '' : <span><i className="icon-fw icon-ban" />{ this.props.t('installer.unavaliable_user_id') }</span>;
|
|
|
return (
|
|
|
- <div className="login-dialog p-t-10 p-b-10 col-sm-offset-4 col-sm-4" id="login-dialog">
|
|
|
+ <div className={'login-dialog p-t-10 p-b-10 col-sm-offset-4 col-sm-4' + hasErrorClass}>
|
|
|
<p className="alert alert-success">
|
|
|
<strong>{ this.props.t('installer.create_initial_account') }</strong><br />
|
|
|
<small>{ this.props.t('installer.initial_account_will_be_administrator_automatically') }</small>
|
|
|
</p>
|
|
|
|
|
|
<form role="form" action="/installer/createAdmin" method="post" id="register-form">
|
|
|
- <div className="input-group" id="input-group-username">
|
|
|
+ <div className={'input-group' + hasErrorClass}>
|
|
|
<span className="input-group-addon"><i className="icon-user"></i></span>
|
|
|
<input type="text" className="form-control" placeholder={ this.props.t('User ID') }
|
|
|
- name="registerForm[username]" defaultValue={this.props.userName} required />
|
|
|
+ name="registerForm[username]" defaultValue={this.props.userName} onChange={this.checkUserName} required />
|
|
|
</div>
|
|
|
- <p className="help-block">
|
|
|
- <span id="help-block-username"></span>
|
|
|
- </p>
|
|
|
+ <p className="help-block">{ unavailableUserId }</p>
|
|
|
|
|
|
<div className="input-group">
|
|
|
<span className="input-group-addon"><i className="icon-tag"></i></span>
|
|
|
- <input type="text" className="form-control" placeholder={ this.props.t('Name') } name="registerForm[name]" defaultValue={ this.props.name } required />
|
|
|
+ <input type="text" className="form-control" placeholder={ this.props.t('Name') }
|
|
|
+ name="registerForm[name]" defaultValue={ this.props.name } required />
|
|
|
</div>
|
|
|
|
|
|
<div className="input-group">
|
|
|
<span className="input-group-addon"><i className="icon-envelope"></i></span>
|
|
|
- <input type="email" className="form-control" placeholder={ this.props.t('Email') } name="registerForm[email]" defaultValue={ this.props.email } required />
|
|
|
+ <input type="email" className="form-control" placeholder={ this.props.t('Email') }
|
|
|
+ name="registerForm[email]" defaultValue={ this.props.email } required />
|
|
|
</div>
|
|
|
|
|
|
<div className="input-group">
|
|
|
<span className="input-group-addon"><i className="icon-lock"></i></span>
|
|
|
- <input type="password" className="form-control" placeholder={ this.props.t('Password') } name="registerForm[password]" required />
|
|
|
+ <input type="password" className="form-control" placeholder={ this.props.t('Password') }
|
|
|
+ name="registerForm[password]" required />
|
|
|
</div>
|
|
|
|
|
|
<input type="hidden" name="_csrf" value={ this.props.csrf } />
|