var React = require("react/addons"), UserRegistration = require('../../models/userRegistration'), RibicaValidationMixin = require('../../components/shared/mixins/ribicaValidationMixin'), UserStore = require('../../stores/userStore'), NavigationActions = require('../../actions/navigationActions'), UserActions = require('../../actions/userActions'), ValidationUtils = require('../../utils/validation'); var Register = React.createClass({ mixins: [React.addons.LinkedStateMixin, RibicaValidationMixin], getInitialState: function() { return { myBabyDetailsVisible: false, firstName: '', lastName: '', email: '', password: '', passwordConfirmation: '', registration: UserStore.getRegistrationState(), myBabyDOBDay: -1, myBabyDOBMonth: -1, myBabyDOBYear: -1, myBabyOnTheWay: true, loginState : UserStore.getLoginState() }; }, myBabyChange: function(e) { this.setState({ myBabyDetailsVisible: true, myBabyOnTheWay: (e.currentTarget.value === "1" ? true: false) }); }, onKeyPress: function(e) { var enterKeyCode = 13; if(e.which == enterKeyCode) { this.doRegister(); } }, renderMonthSelector: function() { var months = ['Januar', 'Februar', 'Mart', 'April', 'Maj', 'Juni', 'Juli','August','Septembar', 'Oktobar','Novembar','Decembar']; var monthsSelect = []; for(var i = 1; i <= months.length; i++) { monthsSelect.push() } return () }, renderYearSelector: function() { var currentYear = (new Date().getFullYear()); var years = []; years.push() for(var i = 0; i < 12; i++) { years.push() } return () }, renderDaySelector: function() { var days = []; days.push() for(var i = 1; i <= 31; i++) { days.push() } return () }, onBabyDOBDayChange: function(e) { this.setState({ myBabyDOBDay: e.currentTarget.value }); }, onBabyDOBMonthChange: function(e) { this.setState({ myBabyDOBMonth: e.currentTarget.value }); }, onBabyDOBYearChange: function(e) { this.setState({ myBabyDOBYear: e.currentTarget.value }); }, myBabyNameChange: function(e) { this.setState({ babyName: e.currentTarget.value }); }, myBabyGenderChange: function(e) { this.setState({ babyGender: e.currentTarget.value }); }, validations: { firstName: function(value) { if (!ValidationUtils.isValidRequired(value)) { return ["Ime je obavezno."]; } }, password: function(value, callback) { if(!ValidationUtils.isValidRequired(value)) { return ["Šifra je obavezna."]; } if (value.length < 6) { return ["Šifra mora sadržavati minimalno 6 karaktera."] } if (callback) { callback([], ["passwordConfirmation"]); } }, passwordConfirmation: function(value) { if (this.getState().password !== value) { return ["Šifre se ne podudaraju."]; } }, lastName : function(value) { if (!ValidationUtils.isValidRequired(value)) { return ["Prezime je obavezno."]; } }, _emailTimeoutId: null, email: function(value, callback) { if (ValidationUtils.isValidEmail(value)) { //clearTimeout(this._emailTimeoutId); //this._emailTimeoutId = setTimeout(function(){ //// TODO: check if email exists //if (value === 'edin@edin.com') { //if(callback) { //var errors= ['Email is already taken']; //callback(errors); //} //} else { //if(callback) { //callback([]); //} //} //}.bind(this), 1000); } else { return ['Neispravna email adresa.']; } } }, renderGenderImage: function() { if(this.state.babyGender === "boy") { return baby } else if (this.state.babyGender === "girl") { return baby } return baby }, renderErrorMessage: function(message){ return (
{message}
) }, componentDidMount: function() { UserStore.addChangeListener(this.onUserStoreChange); }, componentWillUnmount: function() { UserStore.removeChangeListener(this.onUserStoreChange); }, onUserStoreChange: function() { this.setState({ registration: UserStore.getRegistrationState(), loginState : UserStore.getLoginState() }); }, onRegisterClick: function(e) { this.doRegister(); e.preventDefault(); }, doRegister: function() { if(this.validate()) { var children = []; if (this.state.myBabyDetailsVisible) { var dobOk = this.state.myBabyDOBDay !== -1 && this.state.myBabyDOBMonth !== -1 && this.state.myBabyDOBYear !== -1; if (dobOk || this.state.babyName !== undefined || this.state.babyGender !== undefined) { var childInfo = { name: this.state.babyName, gender: this.state.babyGender === "boy" ? 1 : 2, on_the_way: this.state.myBabyOnTheWay } if(dobOk) { var dob = this.state.myBabyDOBDay + '/' + this.state.myBabyDOBMonth + '/' + this.state.myBabyDOBYear; childInfo.date_of_birth = dob; } children.push(childInfo); } } var user = new UserRegistration({ first_name: this.state.firstName, last_name: this.state.lastName, email: this.state.email, password: this.state.password, password_confirmation: this.state.passwordConfirmation, children_attributes : children }); // need to add info about child UserActions.registerUser(user); } }, successContinue: function(e) { NavigationActions.goToHome(); e.preventDefault(); }, prettyPrintError: function(err) { var errorInfo = []; for(var key in err) { if (err.hasOwnProperty(key)) { errorInfo.push(
  • {err[key]}
  • ); } } return () }, renderRegistrationState: function() { var rs = this.state.registration; if (!rs.performed) { return (
    ) } else if(rs.performed && !rs.success){ return (
    Desila se pogreška pri registraciji. Detalji greške su: {this.prettyPrintError(rs.error)}
    ) } else if (rs.performed && rs.success) { return (
    Uspješno ste se registrovali na Ribicu. Kliknite ovdje za nastavak.
    ) } }, render : function() { var cx = React.addons.classSet; var regSuccess = this.state.registration.performed && this.state.registration.success; var classes = cx({ 'hide': regSuccess }); if (!this.state.registration.performed && this.state.loginState.loggedIn) { return (
    Vi ste već registrovani. Uživajte u kupovini.
    ) } return (
    {this.renderRegistrationState()}

    Registracija


    {this.getValidationMessages('firstName').map(this.renderErrorMessage)}
    {this.getValidationMessages('lastName').map(this.renderErrorMessage)}
    {this.getValidationMessages('email').map(this.renderErrorMessage)}
    {this.getValidationMessages('password').map(this.renderErrorMessage)}
    {this.getValidationMessages('passwordConfirmation').map(this.renderErrorMessage)}
    {this.renderGenderImage()}

    Moja beba (po izboru)





    Datum rođenja
    {this.renderDaySelector()}
    {this.renderMonthSelector()}
    {this.renderYearSelector()}

    Već imate profil? Prijavite se

    ); /* return (
    Registracija {this.renderRegistrationState()}
    {this.getValidationMessages('firstName').map(this.renderErrorMessage)}
    {this.getValidationMessages('lastName').map(this.renderErrorMessage)}
    {this.getValidationMessages('email').map(this.renderErrorMessage)}
    {this.getValidationMessages('password').map(this.renderErrorMessage)}
    {this.getValidationMessages('passwordConfirmation').map(this.renderErrorMessage)}
    Vec rođena Na putu
    {this.renderBabyDetails()}
    ); */ } }) module.exports = Register;