2017-09-29 13:27:03 +02:00
|
|
|
import { default as computed } from 'ember-addons/ember-computed-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';
|
2017-09-29 13:27:03 +02:00
|
|
|
import Step from 'wizard/models/step';
|
2017-09-25 16:47:40 +02:00
|
|
|
|
|
|
|
const CustomWizard = Ember.Object.extend({
|
|
|
|
@computed('steps.length')
|
2017-11-01 05:21:14 +01:00
|
|
|
totalSteps: length => length,
|
|
|
|
|
|
|
|
skip() {
|
2018-05-09 07:06:43 +02:00
|
|
|
if (this.get('required') && (!this.get('completed') && this.get('permitted'))) return;
|
2017-11-01 05:21:14 +01:00
|
|
|
const id = this.get('id');
|
2018-05-09 07:06:43 +02:00
|
|
|
CustomWizard.skip(id);
|
2019-07-26 10:59:21 +02:00
|
|
|
},
|
2018-05-09 07:06:43 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
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 = "/";
|
2019-07-02 06:49:14 +02:00
|
|
|
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
|
|
|
|
2019-07-02 06:49:14 +02:00
|
|
|
export function findCustomWizard(wizardId, params = {}) {
|
2019-01-14 03:53:53 +01:00
|
|
|
let url = `/w/${wizardId}`;
|
2019-07-02 06:49:14 +02:00
|
|
|
|
|
|
|
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 => {
|
2019-12-12 05:43:11 +01:00
|
|
|
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
|
|
|
|
2019-07-26 10:59:21 +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);
|
|
|
|
}
|
|
|
|
return (categoriesById[c.id] = Ember.Object.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);
|
|
|
|
});
|
2017-09-29 13:27:03 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
export default CustomWizard;
|