'use strict'; import React from 'react'; import { History } from 'react-router'; import GlobalNotificationModel from '../../models/global_notification_model'; import GlobalNotificationActions from '../../actions/global_notification_actions'; import UserActions from '../../actions/user_actions'; import Form from './form'; import Property from './property'; import InputCheckbox from './input_checkbox'; import ApiUrls from '../../constants/api_urls'; import AscribeSpinner from '../ascribe_spinner'; import { getLangText } from '../../utils/lang_utils'; let SignupForm = React.createClass({ propTypes: { headerMessage: React.PropTypes.string, submitMessage: React.PropTypes.string, handleSuccess: React.PropTypes.func, location: React.PropTypes.object, children: React.PropTypes.oneOfType([ React.PropTypes.arrayOf(React.PropTypes.element), React.PropTypes.element, React.PropTypes.string ]), whitelabelName: React.PropTypes.string }, mixins: [History], getDefaultProps() { return { headerMessage: getLangText('Welcome to ascribe'), submitMessage: getLangText('Sign up') }; }, handleSuccess(response) { if (response.user) { const notification = new GlobalNotificationModel(getLangText('Sign up successful'), 'success', 50000); GlobalNotificationActions.appendGlobalNotification(notification); // Refactor this to its own component this.props.handleSuccess(getLangText('We sent an email to your address') + ' ' + response.user.email + ', ' + getLangText('please confirm') + '.'); } else { UserActions.fetchCurrentUser(true); } }, getFormData() { const { token } = this.props.location.query; return token ? { token } : null; }, render() { const { children, headerMessage, location: { query: { email: emailQuery } }, submitMessage, whitelabelName } = this.props; return ( <Form className="ascribe-form-bordered" ref='form' url={ApiUrls.users_signup} getFormData={this.getFormData} handleSuccess={this.handleSuccess} buttons={ <button type="submit" className="btn btn-default btn-wide"> {submitMessage} </button> } spinner={ <span className="btn btn-default btn-wide btn-spinner"> <AscribeSpinner color="dark-blue" size="md" /> </span> }> <div className="ascribe-form-header"> <h3>{whitelabelName ? `Welcome to ${whitelabelName}` : headerMessage}</h3> </div> <Property name='email' label={getLangText('Email')}> <input type="email" placeholder={getLangText('(e.g. andy@warhol.co.uk)')} autoComplete="on" defaultValue={emailQuery} required/> </Property> <Property name='password' label={getLangText('Password')}> <input type="password" placeholder={getLangText('Use a combination of minimum 10 characters and numbers')} autoComplete="on" required/> </Property> <Property name='password_confirm' label={getLangText('Confirm Password')}> <input type="password" placeholder={getLangText('Enter your password once again')} autoComplete="on" required/> </Property> {children} <Property name="terms" className="ascribe-property-collapsible-toggle"> <InputCheckbox> <span> {' ' + getLangText('I agree to the Terms of Service of ascribe') + ' '} (<a href="https://www.ascribe.io/terms" target="_blank" style={{fontSize: '0.9em', color: 'rgba(0,0,0,0.7)'}}> {getLangText('read')} </a>) </span> </InputCheckbox> </Property> </Form> ); } }); export default SignupForm;