From d9a94db59d18a7a510db57f6038680f3336cdf9d Mon Sep 17 00:00:00 2001 From: Deep Tailor Date: Fri, 26 Jun 2020 13:51:03 -0700 Subject: [PATCH 1/2] prevent composition from adding a dupe into layout --- .../components/DisplayLayout.vue | 42 +++++++++++++++---- 1 file changed, 35 insertions(+), 7 deletions(-) diff --git a/src/plugins/displayLayout/components/DisplayLayout.vue b/src/plugins/displayLayout/components/DisplayLayout.vue index 9d9001ee2d..55eee0a4ba 100644 --- a/src/plugins/displayLayout/components/DisplayLayout.vue +++ b/src/plugins/displayLayout/components/DisplayLayout.vue @@ -445,16 +445,44 @@ export default { this.objectViewMap = {}; this.layoutItems.forEach(this.trackItem); }, - addChild(child) { - let keyString = this.openmct.objects.makeKeyString(child.identifier); - if (this.isTelemetry(child)) { - if (!this.telemetryViewMap[keyString] && !this.objectViewMap[keyString]) { - this.addItem('telemetry-view', child); + isItemAlreadyTracked(child) { + let found = false, + keyString = this.openmct.objects.makeKeyString(child.identifier); + + this.layoutItems.forEach(item => { + if (item.identifier) { + let itemKeyString = this.openmct.objects.makeKeyString(item.identifier); + + if (itemKeyString === keyString) { + found = true; + return; + } } - } else if (!this.objectViewMap[keyString]) { - this.addItem('subobject-view', child); + }); + + if (found) { + return true; + } else if (this.isTelemetry(child)) { + return this.telemetryViewMap[keyString] && this.objectViewMap[keyString]; + } else { + return this.objectViewMap[keyString]; } }, + addChild(child) { + if (this.isItemAlreadyTracked(child)) { + return; + } + + let type; + + if (this.isTelemetry(child)) { + type = 'telemetry-view'; + } else { + type = 'subobject-view'; + } + + this.addItem(type, child); + }, removeChild(identifier) { let keyString = this.openmct.objects.makeKeyString(identifier); From dadb6120c2e3527de47f05e11012dbaeb07a0aa3 Mon Sep 17 00:00:00 2001 From: Deep Tailor Date: Fri, 26 Jun 2020 14:00:39 -0700 Subject: [PATCH 2/2] fix lint error --- src/plugins/displayLayout/components/DisplayLayout.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/displayLayout/components/DisplayLayout.vue b/src/plugins/displayLayout/components/DisplayLayout.vue index 55eee0a4ba..1a4d3b09c5 100644 --- a/src/plugins/displayLayout/components/DisplayLayout.vue +++ b/src/plugins/displayLayout/components/DisplayLayout.vue @@ -452,7 +452,7 @@ export default { this.layoutItems.forEach(item => { if (item.identifier) { let itemKeyString = this.openmct.objects.makeKeyString(item.identifier); - + if (itemKeyString === keyString) { found = true; return;