1
0
Fork 0
discourse-custom-wizard-unl.../assets/javascripts/wizard/models/custom.js.es6

99 Zeilen
2,8 KiB
Text

2020-03-21 18:30:11 +01:00
import { default as computed } from 'discourse-common/utils/decorators';
2017-11-01 05:21:14 +01:00
import getUrl from 'discourse-common/lib/get-url';
2017-09-25 16:47:40 +02:00
import WizardField from 'wizard/models/wizard-field';
import { ajax } from 'wizard/lib/ajax';
import Step from 'wizard/models/step';
2020-04-02 07:21:57 +02:00
import EmberObject from "@ember/object";
2017-09-25 16:47:40 +02:00
2020-04-02 07:21:57 +02:00
const CustomWizard = EmberObject.extend({
2017-09-25 16:47:40 +02:00
@computed('steps.length')
2017-11-01 05:21:14 +01:00
totalSteps: length => length,
skip() {
2020-04-02 07:21:57 +02:00
if (this.required && (!this.completed && this.permitted)) return;
CustomWizard.skip(this.id);
},
});
CustomWizard.reopenClass({
skip(wizardId) {
ajax({ url: `/w/${wizardId}/skip`, type: 'PUT' }).then((result) => {
CustomWizard.finished(result);
2017-11-01 05:21:14 +01:00
});
},
finished(result) {
let url = "/";
if (result.redirect_on_complete) {
url = result.redirect_on_complete;
2017-11-01 05:21:14 +01:00
}
window.location.href = getUrl(url);
}
2018-08-19 02:34:28 +02:00
});
2017-09-25 16:47:40 +02:00
export function findCustomWizard(wizardId, params = {}) {
2019-01-14 03:53:53 +01:00
let url = `/w/${wizardId}`;
let paramKeys = Object.keys(params).filter(k => {
if (k === 'wizard_id') return false;
return !!params[k];
});
if (paramKeys.length) {
url += '?';
paramKeys.forEach((k,i) => {
if (i > 0) {
url += '&';
}
url += `${k}=${params[k]}`;
});
}
2019-01-14 03:53:53 +01:00
return ajax({ url, cache: false, dataType: 'json' }).then(result => {
const wizard = result.custom_wizard;
2017-10-22 05:37:58 +02:00
if (!wizard) return null;
2017-10-13 15:02:34 +02:00
if (!wizard.completed) {
wizard.steps = wizard.steps.map(step => {
const stepObj = Step.create(step);
stepObj.fields = stepObj.fields.map(f => WizardField.create(f));
return stepObj;
});
}
2017-09-25 16:47:40 +02:00
if (wizard.categories) {
let subcatMap = {};
let categoriesById = {};
let categories = wizard.categories.map(c => {
if (c.parent_category_id) {
subcatMap[c.parent_category_id] =
subcatMap[c.parent_category_id] || [];
subcatMap[c.parent_category_id].push(c.id);
}
2020-04-02 07:21:57 +02:00
return (categoriesById[c.id] = EmberObject.create(c));
});
// Associate the categories with their parents
categories.forEach(c => {
let subcategoryIds = subcatMap[c.get("id")];
if (subcategoryIds) {
c.set("subcategories", subcategoryIds.map(id => categoriesById[id]));
}
if (c.get("parent_category_id")) {
c.set("parentCategory", categoriesById[c.get("parent_category_id")]);
}
});
Discourse.Site.currentProp('categoriesList', categories);
Discourse.Site.currentProp('sortedCategories', categories);
Discourse.Site.currentProp('listByActivity', categories);
Discourse.Site.currentProp('categoriesById', categoriesById);
Discourse.Site.currentProp('uncategorized_category_id', wizard.uncategorized_category_id);
}
2017-09-25 16:47:40 +02:00
return CustomWizard.create(wizard);
});
};
export default CustomWizard;