discourse/app/assets/javascripts/wizard/models/step.js.es6

56 lines
1.3 KiB
Plaintext
Raw Normal View History

2016-08-26 01:14:56 +08:00
import computed from 'ember-addons/ember-computed-decorators';
import ValidState from 'wizard/mixins/valid-state';
import { ajax } from 'wizard/lib/ajax';
export default Ember.Object.extend(ValidState, {
id: null,
@computed('index')
displayIndex: index => index + 1,
2016-09-02 23:42:14 +08:00
@computed('fields.[]')
fieldsById(fields) {
const lookup = {};
fields.forEach(field => lookup[field.get('id')] = field);
return lookup;
},
validate() {
2016-08-26 01:14:56 +08:00
let allValid = true;
const result = { warnings: [] };
2016-08-26 01:14:56 +08:00
this.get('fields').forEach(field => {
allValid = allValid && field.check();
const warning = field.get('warning');
if (warning) {
result.warnings.push(warning);
}
2016-08-26 01:14:56 +08:00
});
this.setValid(allValid);
return result;
2016-08-26 01:14:56 +08:00
},
fieldError(id, description) {
const field = this.get('fields').findBy('id', id);
2016-08-26 01:14:56 +08:00
if (field) {
field.setValid(false, description);
}
},
save() {
const fields = {};
this.get('fields').forEach(f => fields[f.id] = f.value);
return ajax({
url: `/wizard/steps/${this.get('id')}`,
type: 'PUT',
data: { fields }
}).catch(response => {
response.responseJSON.errors.forEach(err => this.fieldError(err.field, err.description));
throw response;
});
}
});