diff --git a/src/plugins/condition/ConditionManager.js b/src/plugins/condition/ConditionManager.js index 56e8a4fd9f..66fd392fc2 100644 --- a/src/plugins/condition/ConditionManager.js +++ b/src/plugins/condition/ConditionManager.js @@ -34,6 +34,7 @@ export default class ConditionManager extends EventEmitter { } initialize() { + this.conditionResults = {}; this.openmct.objects.get(this.domainObject.identifier).then((obj) => { this.observeForChanges(obj); this.conditionCollection = []; @@ -67,10 +68,7 @@ export default class ConditionManager extends EventEmitter { //check for removed conditions oldConditionIdentifiers.forEach((identifier, index) => { if (newConditionIdentifiers.indexOf(identifier) < 0) { - let condition = this.conditionCollection[index]; - if (condition) { - this.removeCondition(condition); - } + this.removeCondition(identifier); } }); @@ -157,19 +155,38 @@ export default class ConditionManager extends EventEmitter { this.persist(); } - removeCondition(condition, index) { - if (index !== undefined && index > -1) { - condition = this.conditionCollection[index]; - } - if (condition) { + removeCondition(identifier) { + let found = this.findConditionById(identifier); + if (found) { + let index = found.index; + let condition = this.conditionCollection[index]; + let conditionIdAsString = this.openmct.objects.makeKeyString(condition.identifier); condition.destroyCriteria(); condition.off('conditionResultUpdated', this.handleConditionResult.bind(this)); this.conditionCollection.splice(index, 1); this.domainObject.configuration.conditionCollection.splice(index, 1); + if (this.conditionResults[conditionIdAsString] !== undefined) { + delete this.conditionResults[conditionIdAsString]; + } this.persist(); } } + findConditionById(identifier) { + let found; + for (let i=0, ii=this.conditionCollection.length; i < ii; i++) { + if (this.conditionCollection[i].id === this.openmct.objects.makeKeyString(identifier)) { + found = { + item: this.conditionCollection[i], + index: i + } + break; + } + } + + return found; + } + //this.$set(this.conditionCollection, reorderEvent.newIndex, oldConditions[reorderEvent.oldIndex]); reorderConditions(reorderPlan) { let oldConditions = Array.from(this.domainObject.configuration.conditionCollection); @@ -185,10 +202,29 @@ export default class ConditionManager extends EventEmitter { } handleConditionResult(args) { - this.emit('conditionResultUpdated', { - id: args.id, - result: args.data.result - }) + let idAsString = this.openmct.objects.makeKeyString(args.id); + let found = this.findConditionById(idAsString); + let conditionCollection = this.domainObject.configuration.conditionCollection; + let currentConditionIdentifier = conditionCollection[conditionCollection.length-1]; + if (found) { + this.conditionResults[idAsString] = args.data.result; + + for (let i = 0, ii = conditionCollection.length - 1; i < ii; i++) { + let conditionIdAsString = this.openmct.objects.makeKeyString(conditionCollection[i]); + if (this.conditionResults[conditionIdAsString]) { + //first condition to be true wins + currentConditionIdentifier = conditionCollection[i]; + break; + } + } + } + + this.openmct.objects.get(currentConditionIdentifier).then((obj) => { + this.emit('conditionSetResultUpdated', { + id: this.domainObject.identifier, + output: obj.configuration.output + }) + }); } persist() { diff --git a/src/plugins/condition/components/ConditionCollection.vue b/src/plugins/condition/components/ConditionCollection.vue index 3a2ba0e388..be38bebfb4 100644 --- a/src/plugins/condition/components/ConditionCollection.vue +++ b/src/plugins/condition/components/ConditionCollection.vue @@ -67,7 +67,6 @@ :condition-index="index" :telemetry="telemetryObjs" :is-editing="isEditing" - @updateCurrentCondition="updateCurrentCondition" @removeCondition="removeCondition" @cloneCondition="cloneCondition" @setMoveIndex="setMoveIndex" @@ -110,7 +109,7 @@ export default { this.composition.off('add', this.addTelemetryObject); this.composition.off('remove', this.removeTelemetryObject); if(this.conditionManager) { - this.conditionManager.off('conditionResultUpdated', this.handleConditionResult); + this.conditionManager.off('conditionSetResultUpdated', this.handleOutputUpdated); } if (typeof this.stopObservingForChanges === 'function') { this.stopObservingForChanges(); @@ -123,7 +122,7 @@ export default { this.composition.load(); this.conditionCollection = this.domainObject.configuration.conditionCollection; this.conditionManager = new ConditionManager(this.domainObject, this.openmct); - this.conditionManager.on('conditionResultUpdated', this.handleConditionResult.bind(this)); + this.conditionManager.on('conditionSetResultUpdated', this.handleOutputUpdated.bind(this)); this.observeForChanges(); }, methods: { @@ -178,22 +177,8 @@ export default { dragLeave(e) { e.target.classList.remove("dragging"); }, - handleConditionResult(args) { - let idAsString = this.openmct.objects.makeKeyString(args.id); - this.conditionResults[idAsString] = args.result; - this.updateCurrentConditionId(); - }, - updateCurrentConditionId() { - let currentConditionIdentifier = this.conditionCollection[this.conditionCollection.length-1]; - for (let i = 0; i < this.conditionCollection.length - 1; i++) { - let conditionIdAsString = this.openmct.objects.makeKeyString(this.conditionCollection[i]); - if (this.conditionResults[conditionIdAsString]) { - //first condition to be true wins - currentConditionIdentifier = this.conditionCollection[i]; - break; - } - } - this.$emit('currentConditionUpdated', currentConditionIdentifier); + handleOutputUpdated(args) { + this.$emit('currentConditionSetOutputUpdated', args); }, addTelemetryObject(domainObject) { this.telemetryObjs.push(domainObject); diff --git a/src/plugins/condition/components/ConditionSet.vue b/src/plugins/condition/components/ConditionSet.vue index 19f0959076..cc5af46072 100644 --- a/src/plugins/condition/components/ConditionSet.vue +++ b/src/plugins/condition/components/ConditionSet.vue @@ -23,10 +23,10 @@