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

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

59 lines
1.3 KiB
JavaScript
Raw Normal View History

import EmberObject from "@ember/object";
2016-08-26 01:14:56 +08:00
import ValidState from "wizard/mixins/valid-state";
import { ajax } from "wizard/lib/ajax";
import discourseComputed from "discourse-common/utils/decorators";
2016-08-26 01:14:56 +08:00
export default EmberObject.extend(ValidState, {
2016-08-26 01:14:56 +08:00
id: null,
@discourseComputed("index")
2018-07-30 23:56:48 +08:00
displayIndex: (index) => index + 1,
2016-08-26 01:14:56 +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;
},
validate() {
2016-08-26 01:14:56 +08:00
let allValid = true;
const result = { warnings: [] };
this.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.fields.findBy("id", id);
2016-08-26 01:14:56 +08:00
if (field) {
field.setValid(false, description);
}
},
save() {
const fields = {};
this.fields.forEach((f) => (fields[f.id] = f.value));
2016-08-26 01:14:56 +08:00
return ajax({
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)
);
throw new Error(response);
2016-08-26 01:14:56 +08:00
});
},
});