import { default as computed } from 'ember-addons/ember-computed-decorators'; import getUrl from 'discourse-common/lib/get-url'; import WizardField from 'wizard/models/wizard-field'; import { ajax } from 'wizard/lib/ajax'; import Step from 'wizard/models/step'; const CustomWizard = Ember.Object.extend({ @computed('steps.length') totalSteps: length => length, skip() { if (this.get('required') && (!this.get('completed') && this.get('permitted'))) return; const id = this.get('id'); CustomWizard.skip(id); }, }); CustomWizard.reopenClass({ skip(wizardId) { ajax({ url: `/w/${wizardId}/skip`, type: 'PUT' }).then((result) => { CustomWizard.finished(result); }); }, finished(result) { let url = "/"; if (result.redirect_on_complete) { url = result.redirect_on_complete; } window.location.href = getUrl(url); } }); export function findCustomWizard(wizardId, params = {}) { 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]}`; }); } return ajax({ url, cache: false, dataType: 'json' }).then(result => { const wizard = result.custom_wizard; if (!wizard) return null; 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; }); } 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); } return CustomWizard.create(wizard); }); }; export default CustomWizard;