2019-10-30 03:23:50 +08:00
|
|
|
import EmberObject from "@ember/object";
|
2019-11-08 05:38:28 +08:00
|
|
|
import discourseComputed from "discourse-common/utils/decorators";
|
2016-08-26 01:14:56 +08:00
|
|
|
import ValidState from "wizard/mixins/valid-state";
|
|
|
|
import { ajax } from "wizard/lib/ajax";
|
|
|
|
|
2019-10-30 03:23:50 +08:00
|
|
|
export default EmberObject.extend(ValidState, {
|
2016-08-26 01:14:56 +08:00
|
|
|
id: null,
|
|
|
|
|
2019-11-08 05:38:28 +08:00
|
|
|
@discourseComputed("index")
|
2018-07-30 23:56:48 +08:00
|
|
|
displayIndex: index => index + 1,
|
2016-08-26 01:14:56 +08:00
|
|
|
|
2019-11-08 05:38:28 +08:00
|
|
|
@discourseComputed("fields.[]")
|
2016-09-02 23:42:14 +08:00
|
|
|
fieldsById(fields) {
|
|
|
|
const lookup = {};
|
|
|
|
fields.forEach(field => (lookup[field.get("id")] = field));
|
|
|
|
return lookup;
|
|
|
|
},
|
|
|
|
|
2016-09-21 00:28:22 +08:00
|
|
|
validate() {
|
2016-08-26 01:14:56 +08:00
|
|
|
let allValid = true;
|
2016-09-21 00:28:22 +08:00
|
|
|
const result = { warnings: [] };
|
|
|
|
|
2019-05-27 16:15:39 +08:00
|
|
|
this.fields.forEach(field => {
|
2016-09-21 00:28:22 +08:00
|
|
|
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);
|
2016-09-21 00:28:22 +08:00
|
|
|
|
|
|
|
return result;
|
2016-08-26 01:14:56 +08:00
|
|
|
},
|
|
|
|
|
|
|
|
fieldError(id, description) {
|
2019-05-27 16:15:39 +08:00
|
|
|
const field = this.fields.findBy("id", id);
|
2016-08-26 01:14:56 +08:00
|
|
|
if (field) {
|
|
|
|
field.setValid(false, description);
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
save() {
|
|
|
|
const fields = {};
|
2019-05-27 16:15:39 +08:00
|
|
|
this.fields.forEach(f => (fields[f.id] = f.value));
|
2016-08-26 01:14:56 +08:00
|
|
|
|
|
|
|
return ajax({
|
2019-05-27 16:15:39 +08:00
|
|
|
url: `/wizard/steps/${this.id}`,
|
2016-08-26 01:14:56 +08:00
|
|
|
type: "PUT",
|
|
|
|
data: { fields }
|
|
|
|
}).catch(response => {
|
|
|
|
response.responseJSON.errors.forEach(err =>
|
|
|
|
this.fieldError(err.field, err.description)
|
|
|
|
);
|
2018-06-05 22:43:45 +08:00
|
|
|
throw new Error(response);
|
2016-08-26 01:14:56 +08:00
|
|
|
});
|
|
|
|
}
|
|
|
|
});
|