import { computed, set } from "@ember/object"; import { alias, equal, not, or } from "@ember/object/computed"; import { connectorContent, defaultConnector, defaultSelectionType, inputTypesContent, newPair, } from "../lib/wizard-mapper"; import Component from "@ember/component"; import { observes } from "discourse-common/utils/decorators"; import { A } from "@ember/array"; export default Component.extend({ classNameBindings: [":mapper-input", "inputType"], inputType: alias("input.type"), isConditional: equal("inputType", "conditional"), isAssignment: equal("inputType", "assignment"), isAssociation: equal("inputType", "association"), isValidation: equal("inputType", "validation"), hasOutput: or("isConditional", "isAssignment"), hasPairs: or("isConditional", "isAssociation", "isValidation"), canAddPair: not("isAssignment"), connectors: computed(function () { return connectorContent("output", this.input.type, this.options); }), inputTypes: computed(function () { return inputTypesContent(this.options); }), @observes("input.type") setupType() { if (this.hasPairs && (!this.input.pairs || this.input.pairs.length < 1)) { this.send("addPair"); } if (this.hasOutput) { this.set("input.output", null); if (!this.input.outputConnector) { const options = this.options; this.set("input.output_type", defaultSelectionType("output", options)); this.set( "input.output_connector", defaultConnector("output", this.inputType, options) ); } } }, actions: { addPair() { if (!this.input.pairs) { this.set("input.pairs", A()); } const pairs = this.input.pairs; const pairCount = pairs.length + 1; pairs.forEach((p) => set(p, "pairCount", pairCount)); pairs.pushObject( newPair( this.input.type, Object.assign({}, this.options, { index: pairs.length, pairCount }) ) ); }, removePair(pair) { const pairs = this.input.pairs; const pairCount = pairs.length - 1; pairs.forEach((p) => set(p, "pairCount", pairCount)); pairs.removeObject(pair); }, }, });