0
0
Fork 1
Spiegel von https://github.com/paviliondev/discourse-custom-wizard.git synchronisiert 2024-11-10 04:12:53 +01:00
discourse-custom-wizard/assets/javascripts/discourse/components/wizard-mapper.js.es6
2020-04-15 15:41:27 +10:00

73 Zeilen
2,1 KiB
JavaScript

import { getOwner } from 'discourse-common/lib/get-owner';
import { newInput, selectionTypes } from '../lib/wizard-mapper';
import { default as discourseComputed, observes, on } from 'discourse-common/utils/decorators';
import { later } from "@ember/runloop";
import Component from "@ember/component";
import { A } from "@ember/array";
export default Component.extend({
classNames: 'wizard-mapper',
didReceiveAttrs() {
if (this.inputs && this.inputs.constructor !== Array) {
later(() => this.set('inputs', null));
}
},
@discourseComputed('inputs.@each.type')
canAdd(inputs) {
return !inputs ||
inputs.constructor !== Array ||
inputs.every(i => {
return ['assignment','association'].indexOf(i.type) === -1;
});
},
@discourseComputed('options.@each.inputType')
inputOptions(options) {
let result = {
inputTypes: options.inputTypes || 'assignment,conditional',
inputConnector: options.inputConnector || 'or',
pairConnector: options.pairConnector || null,
outputConnector: options.outputConnector || null,
context: options.context || null
}
let inputTypes = ['key', 'value', 'output'];
inputTypes.forEach(type => {
result[`${type}Placeholder`] = options[`${type}Placeholder`] || null;
result[`${type}DefaultSelection`] = options[`${type}DefaultSelection`] || null;
});
selectionTypes.forEach(type => {
if (options[`${type}Selection`] !== undefined) {
result[`${type}Selection`] = options[`${type}Selection`]
} else {
result[`${type}Selection`] = type === 'text' ? true : false;
}
});
return result;
},
actions: {
add() {
if (!this.get('inputs')) {
this.set('inputs', A());
}
this.get('inputs').pushObject(
newInput(this.inputOptions, this.inputs.length)
);
},
remove(input) {
const inputs = this.inputs;
inputs.removeObject(input);
if (inputs.length) {
inputs[0].set('connector', null);
}
}
}
});