import React from 'react'; import Button from 'misago/components/button'; // jshint ignore:line import Form from 'misago/components/form'; import FormGroup from 'misago/components/form-group'; // jshint ignore:line import PasswordStrength from 'misago/components/password-strength'; // jshint ignore:line import misago from 'misago'; import ajax from 'misago/services/ajax'; import auth from 'misago/services/auth'; // jshint ignore:line import captcha from 'misago/services/captcha'; import modal from 'misago/services/modal'; import snackbar from 'misago/services/snackbar'; import showBannedPage from 'misago/utils/banned-page'; import * as validators from 'misago/utils/validators'; export class RegisterForm extends Form { constructor(props) { super(props); this.state = { isLoading: false, username: '', email: '', password: '', captcha: '', validators: { username: [ validators.usernameContent(), validators.usernameMinLength(misago.get('SETTINGS')), validators.usernameMaxLength(misago.get('SETTINGS')) ], email: [ validators.email() ], password: [ validators.passwordMinLength(misago.get('SETTINGS')) ], captcha: captcha.validator() }, errors: {} }; } clean() { if (this.isValid()) { return true; } else { snackbar.error(gettext("Form contains errors.")); this.setState({ errors: this.validate() }); return false; } } send() { return ajax.post(misago.get('USERS_API'), { username: this.state.username, email: this.state.email, password: this.state.password, captcha: this.state.captcha }); } handleSuccess(apiResponse) { this.props.callback(apiResponse); } handleError(rejection) { if (rejection.status === 400) { this.setState({ 'errors': Object.assign({}, this.state.errors, rejection) }); if (rejection.__all__ && rejection.__all__.length > 0) { snackbar.error(rejection.__all__[0]); } else { snackbar.error(gettext("Form contains errors.")); } } else if (rejection.status === 403 && rejection.ban) { showBannedPage(rejection.ban); modal.hide(); } else { snackbar.apiError(rejection); } } getLegalFootNote() { if (misago.get('TERMS_OF_SERVICE_URL')) { /* jshint ignore:start */ return {gettext("By registering you agree to site's terms and conditions.")} ; /* jshint ignore:end */ } else { return null; } } render() { /* jshint ignore:start */ return
{interpolate( this.getLead(), {'username': this.props.username}, true)}
{interpolate( this.getSubscript(), {'email': this.props.email}, true)}