bunch of fixes, need to refactoring to move state to the store in order to make it more fluxy

This commit is contained in:
Edin Dazdarevic
2015-03-19 22:29:16 +01:00
parent bc10740780
commit a7e40e579f
5 changed files with 93 additions and 213 deletions

View File

@@ -18,44 +18,75 @@ var Register = React.createClass({
email: '',
password: '',
passwordConfirmation: '',
registration: UserStore.getRegistrationState()
registration: UserStore.getRegistrationState(),
myBabyDOBDay: -1,
myBabyDOBMonth: -1,
myBabyDOBYear: -1,
myBabyOnTheWay: false,
loginState : UserStore.getLoginState()
};
},
myBabyChange: function() {
myBabyChange: function(e) {
this.setState({
myBabyDetailsVisible: true
myBabyDetailsVisible: true,
myBabyOnTheWay: (e.currentTarget.value === "1" ? true: false)
});
},
renderMonthSelector: function() {
var months = ['Januar', 'Februar', 'Mart', 'April', 'Maj', 'Juni',
'Juli','August','Septembar', 'Oktobar','Novembar','Decembar'];
var monthsSelect = [];
for(var i = 0; i < months.length; i++) {
monthsSelect.push(<option value={i}>{months[i]}</option>)
var monthsSelect = [<option value='-1'>Mjesec</option>];
for(var i = 1; i <= months.length; i++) {
monthsSelect.push(<option value={i}>{months[i - 1]}</option>)
}
return (<select>{monthsSelect}</select>)
return (<select onChange={this.onBabyDOBMonthChange}>{monthsSelect}</select>)
},
renderYearSelector: function() {
var currentYear = (new Date().getFullYear());
var years = [];
years.push(<option>Godina</option>)
years.push(<option value='-1'>Godina</option>)
for(var i = 0; i < 12; i++) {
years.push(<option value={currentYear - i}>{currentYear - i}</option>)
}
return (<select> {years} </select>)
return (<select onChange={this.onBabyDOBYearChange}> {years} </select>)
},
renderDaySelector: function() {
var days = [];
days.push(<option>Dan</option>)
days.push(<option value='-1'>Dan</option>)
for(var i = 1; i <= 31; i++) {
days.push(<option value={i}>{i}</option>)
}
return (<select> {days} </select>)
return (<select onChange={this.onBabyDOBDayChange}> {days} </select>)
},
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
});
},
renderBabyDetails: function() {
if (!this.state.myBabyDetailsVisible) {
@@ -70,16 +101,16 @@ var Register = React.createClass({
<label for="baby_gender" className="col-md-4 control-label">Spol</label>
<div className="col-md-4">
<input type="radio" name="baby_gender"/> Djevojčica
<input type="radio" name="baby_gender"/> Dječak
<input type="radio" name="baby_gender"/> Jos ne znamo
<input type="radio" name="baby_gender" value="0" onChange={this.myBabyGenderChange}/> Djevojčica
<input type="radio" name="baby_gender" value="1" onChange={this.myBabyGenderChange}/> Dječak
<input type="radio" name="baby_gender" value="2" onChange={this.myBabyGenderChange}/> Jos ne znamo
</div>
</div>
<div className="form-group">
<label for="baby_name" className="col-md-4 control-label">Ime</label>
<div className="col-md-4">
<input type="text" className="form-control" id="baby_name" placeholder="Ime bebe"/>
<input type="text" className="form-control" id="baby_name" onChange={this.myBabyNameChange} placeholder="Ime bebe"/>
</div>
</div>
<div className="form-group">
@@ -159,17 +190,30 @@ var Register = React.createClass({
},
onUserStoreChange: function() {
this.setState({
registration: UserStore.getRegistrationState()
registration: UserStore.getRegistrationState(),
loginState : UserStore.getLoginState()
});
},
register: function(e) {
if(this.validate()) {
var children = [];
if (this.state.myBabyDetailsVisible) {
children.push({
name: 'Dijete',
gender: 1
});
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,
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({
@@ -194,6 +238,17 @@ var Register = React.createClass({
NavigationActions.goToHome();
e.preventDefault();
},
prettyPrintError: function(err) {
var errorInfo = [];
for(var key in err) {
if (err.hasOwnProperty(key)) {
errorInfo.push(<li>{err[key]}</li>);
}
}
return (<ul>
{errorInfo}
</ul>)
},
renderRegistrationState: function() {
var rs = this.state.registration;
if (!rs.performed) {
@@ -202,7 +257,7 @@ var Register = React.createClass({
} else if(rs.performed && !rs.success){
return (<div>
Desila se pogreška pri registraciji. Detalji greške su:
{rs.error.responseJSON}
{this.prettyPrintError(rs.error)}
</div>)
} else if (rs.performed && rs.success) {
return (<div>
@@ -216,6 +271,9 @@ var Register = React.createClass({
var classes = cx({
'hide': regSuccess
});
if (this.state.loginState.loggedIn) {
return (<div>Vi ste već registrovani. Uživajte u kupovini.</div>)
}
return (<div>
<span className="h3">Registracija</span>
{this.renderRegistrationState()}
@@ -265,8 +323,8 @@ var Register = React.createClass({
<div className="form-group">
<label for="my_baby" className="col-md-4 control-label">Moja beba</label>
<div className="col-md-4">
<input type="radio" onChange={this.myBabyChange} name="my_baby" id="already_born" /> Vec rođena
<input type="radio" onChange={this.myBabyChange} id="on_the_way" name="my_baby" />Na putu
<input type="radio" onChange={this.myBabyChange} name="my_baby" id="already_born" /> Vec rođena
<input type="radio" onChange={this.myBabyChange} value="1" id="on_the_way" name="my_baby" />Na putu
</div>
</div>