2020-04-06 03:54:16 +02:00
|
|
|
import { default as discourseComputed, observes, on } from 'discourse-common/utils/decorators';
|
|
|
|
import { notEmpty, alias } from "@ember/object/computed";
|
2017-11-01 05:21:14 +01:00
|
|
|
import showModal from 'discourse/lib/show-modal';
|
2020-04-02 07:21:57 +02:00
|
|
|
import { generateId } from '../lib/wizard';
|
|
|
|
import { buildProperties } from '../lib/wizard-json';
|
2020-03-30 01:53:28 +02:00
|
|
|
import { dasherize } from "@ember/string";
|
2020-04-02 07:21:57 +02:00
|
|
|
import EmberObject from "@ember/object";
|
2020-04-05 03:37:09 +02:00
|
|
|
import { scheduleOnce, later } from "@ember/runloop";
|
|
|
|
import Controller from "@ember/controller";
|
2017-10-06 04:59:02 +02:00
|
|
|
|
2020-04-05 03:37:09 +02:00
|
|
|
export default Controller.extend({
|
2020-03-30 01:53:28 +02:00
|
|
|
hasName: notEmpty('model.name'),
|
2020-04-06 03:54:16 +02:00
|
|
|
userFields: alias('model.userFields'),
|
2020-04-08 09:59:54 +02:00
|
|
|
|
2020-04-06 03:54:16 +02:00
|
|
|
@observes('currentStep')
|
|
|
|
resetCurrentObjects() {
|
|
|
|
const currentStep = this.currentStep;
|
|
|
|
|
2020-04-07 09:54:30 +02:00
|
|
|
if (currentStep) {
|
|
|
|
const fields = currentStep.fields;
|
2020-04-08 09:59:54 +02:00
|
|
|
this.set('currentField', fields && fields.length ? fields[0] : null)
|
2020-04-07 09:54:30 +02:00
|
|
|
}
|
2020-04-06 03:54:16 +02:00
|
|
|
|
2020-04-02 07:21:57 +02:00
|
|
|
scheduleOnce('afterRender', () => ($("body").addClass('admin-wizard')));
|
|
|
|
},
|
|
|
|
|
2020-03-30 01:53:28 +02:00
|
|
|
@observes('model.name')
|
|
|
|
setId() {
|
2020-04-06 03:54:16 +02:00
|
|
|
if (!this.model.existingId) {
|
|
|
|
this.set('model.id', generateId(this.model.name));
|
|
|
|
}
|
2020-04-01 07:03:26 +02:00
|
|
|
},
|
|
|
|
|
|
|
|
@discourseComputed('model.id')
|
|
|
|
wizardUrl(wizardId) {
|
|
|
|
return window.location.origin + '/w/' + dasherize(wizardId);
|
2017-10-06 04:59:02 +02:00
|
|
|
},
|
|
|
|
|
2020-04-01 07:03:26 +02:00
|
|
|
@discourseComputed('model.after_time_scheduled')
|
2017-11-01 05:21:14 +01:00
|
|
|
nextSessionScheduledLabel(scheduled) {
|
2020-03-29 09:49:33 +02:00
|
|
|
return scheduled ?
|
|
|
|
moment(scheduled).format('MMMM Do, HH:mm') :
|
|
|
|
I18n.t('admin.wizard.after_time_time_label');
|
2017-11-01 05:21:14 +01:00
|
|
|
},
|
2020-04-01 07:03:26 +02:00
|
|
|
|
|
|
|
@discourseComputed('currentStep.id', 'model.save_submissions', 'model.steps.@each.fields[]')
|
|
|
|
wizardFields(currentStepId, saveSubmissions) {
|
|
|
|
const allSteps = this.get('model.steps');
|
|
|
|
let steps = allSteps;
|
|
|
|
let fields = [];
|
|
|
|
|
|
|
|
if (!saveSubmissions) {
|
|
|
|
steps = [allSteps.findBy('id', currentStepId)];
|
|
|
|
}
|
|
|
|
|
|
|
|
steps.forEach((s) => {
|
|
|
|
if (s.fields && s.fields.length > 0) {
|
|
|
|
let stepFields = s.fields.map((f) => {
|
2020-04-02 07:21:57 +02:00
|
|
|
return EmberObject.create({
|
2020-04-01 07:03:26 +02:00
|
|
|
id: f.id,
|
2020-04-07 13:06:35 +02:00
|
|
|
label: `${f.label} (${s.id})`,
|
2020-04-01 07:03:26 +02:00
|
|
|
type: f.type
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
fields.push(...stepFields);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
return fields;
|
|
|
|
},
|
2017-11-01 05:21:14 +01:00
|
|
|
|
2017-09-23 04:34:07 +02:00
|
|
|
actions: {
|
|
|
|
save() {
|
2017-10-13 15:02:34 +02:00
|
|
|
this.setProperties({
|
|
|
|
saving: true,
|
|
|
|
error: null
|
|
|
|
});
|
2020-03-29 09:49:33 +02:00
|
|
|
|
2020-04-01 14:16:26 +02:00
|
|
|
const wizard = this.model;
|
|
|
|
|
|
|
|
wizard.save().then((result) => {
|
|
|
|
|
|
|
|
this.model.setProperties(
|
|
|
|
buildProperties(result.wizard)
|
|
|
|
);
|
2020-03-29 09:49:33 +02:00
|
|
|
|
2017-10-13 15:02:34 +02:00
|
|
|
this.set('saving', false);
|
2020-04-01 14:16:26 +02:00
|
|
|
|
2017-10-07 04:27:38 +02:00
|
|
|
if (this.get('newWizard')) {
|
|
|
|
this.send("refreshAllWizards");
|
|
|
|
} else {
|
|
|
|
this.send("refreshWizard");
|
|
|
|
}
|
2017-10-30 07:24:51 +01:00
|
|
|
}).catch((result) => {
|
2017-10-13 15:02:34 +02:00
|
|
|
this.set('saving', false);
|
2020-04-10 09:57:49 +02:00
|
|
|
|
|
|
|
let error = true;
|
|
|
|
if (result.error) {
|
|
|
|
let type = result.error.type;
|
|
|
|
let params = result.error.params || {};
|
|
|
|
error = I18n.t(`admin.wizard.error.${type}`, params);
|
|
|
|
}
|
|
|
|
this.set('error', error);
|
|
|
|
|
2020-04-05 03:37:09 +02:00
|
|
|
later(() => this.set('error', null), 10000);
|
2017-09-23 04:34:07 +02:00
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
remove() {
|
2017-11-01 05:21:14 +01:00
|
|
|
const wizard = this.get('model');
|
|
|
|
wizard.remove().then(() => {
|
2017-10-07 04:27:38 +02:00
|
|
|
this.send("refreshAllWizards");
|
2017-09-23 04:34:07 +02:00
|
|
|
});
|
2017-11-01 05:21:14 +01:00
|
|
|
},
|
|
|
|
|
|
|
|
setNextSessionScheduled() {
|
|
|
|
let controller = showModal('next-session-scheduled', {
|
|
|
|
model: {
|
|
|
|
dateTime: this.get('model.after_time_scheduled'),
|
|
|
|
update: (dateTime) => this.set('model.after_time_scheduled', dateTime)
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
controller.setup();
|
|
|
|
},
|
2020-04-02 07:21:57 +02:00
|
|
|
|
|
|
|
toggleAdvanced() {
|
|
|
|
this.toggleProperty('model.showAdvanced');
|
|
|
|
}
|
2017-09-23 04:34:07 +02:00
|
|
|
}
|
|
|
|
});
|