diff --git a/src/plugins/condition/ConditionManager.js b/src/plugins/condition/ConditionManager.js index a74ff2230f..da9c7535fb 100644 --- a/src/plugins/condition/ConditionManager.js +++ b/src/plugins/condition/ConditionManager.js @@ -135,18 +135,7 @@ export default class ConditionManager extends EventEmitter { } findConditionById(id) { - let found; - for (let i=0, ii=this.conditionClassCollection.length; i < ii; i++) { - if (this.conditionClassCollection[i].id === id) { - found = { - item: this.conditionClassCollection[i], - index: i - }; - break; - } - } - - return found; + return this.conditionClassCollection.find(conditionClass => conditionClass.id === id); } //this.$set(this.conditionClassCollection, reorderEvent.newIndex, oldConditions[reorderEvent.oldIndex]); diff --git a/src/plugins/condition/StyleRuleManager.js b/src/plugins/condition/StyleRuleManager.js index 972e8b58a7..09c2c98172 100644 --- a/src/plugins/condition/StyleRuleManager.js +++ b/src/plugins/condition/StyleRuleManager.js @@ -34,7 +34,6 @@ export default class StyleRuleManager extends EventEmitter { initialize(conditionalStyleConfiguration) { this.conditionSetIdentifier = conditionalStyleConfiguration.conditionSetIdentifier; - this.defaultStyle = conditionalStyleConfiguration.defaultStyle; this.updateConditionStylesMap(conditionalStyleConfiguration.styles || []); } @@ -89,7 +88,11 @@ export default class StyleRuleManager extends EventEmitter { } destroy() { - this.currentStyle = this.defaultStyle; + if (this.currentStyle) { + Object.keys(this.currentStyle).forEach(key => { + this.currentStyle[key] = 'inherit'; + }); + } this.updateDomainObjectStyle(); if (this.stopProvidingTelemetry) { this.stopProvidingTelemetry(); diff --git a/src/plugins/condition/components/inspector/ConditionalStyle.vue b/src/plugins/condition/components/inspector/ConditionalStyle.vue index 51389ec435..8e762ac575 100644 --- a/src/plugins/condition/components/inspector/ConditionalStyle.vue +++ b/src/plugins/condition/components/inspector/ConditionalStyle.vue @@ -1,28 +1,69 @@ diff --git a/src/plugins/condition/components/inspector/ConditionalStylesView.vue b/src/plugins/condition/components/inspector/ConditionalStylesView.vue index fb4de9a38f..8965b311c5 100644 --- a/src/plugins/condition/components/inspector/ConditionalStylesView.vue +++ b/src/plugins/condition/components/inspector/ConditionalStylesView.vue @@ -23,8 +23,8 @@
  • -
  • @@ -41,21 +41,33 @@ export default { }, inject: [ 'openmct', - 'domainObject', - 'layoutItem' + 'domainObject' ], + props: { + itemId: { + type: String, + default: '' + }, + initialStyles: { + type: Object, + default() { + return undefined; + } + } + }, data() { return { conditionalStyles: [] } }, mounted() { - if (this.layoutItem) { - //TODO: Handle layout items - } - if (this.domainObject.configuration) { - this.defautStyle = this.domainObject.configuration.defaultStyle; - if (this.domainObject.configuration.conditionalStyle) { + if (this.domainObject.configuration && this.domainObject.configuration.conditionalStyle) { + if (this.itemId) { + let conditionalStyle = this.domainObject.configuration.conditionalStyle[this.itemId]; + if (conditionalStyle) { + this.conditionalStyles = conditionalStyle.styles || []; + } + } else { this.conditionalStyles = this.domainObject.configuration.conditionalStyle.styles || []; } } @@ -65,49 +77,86 @@ export default { //TODO: this.conditionSetIdentifier will be set by the UI before calling this this.conditionSetIdentifier = { namespace: '', - key: 'bb0f61ad-268d-4d3e-bb30-90ca4a2053c4' + key: "81088c8a-4b80-41fe-9d07-fda8b22d6f5f" }; this.initializeConditionalStyles(); }, removeConditionSet() { + //TODO: Handle the case where domainObject has items with styles but we're trying to remove the styles on the domainObject itself this.conditionSetIdentifier = ''; this.conditionalStyles = []; - this.persist(undefined); + let domainObjectConditionalStyle = (this.domainObject.configuration && this.domainObject.configuration.conditionalStyle) || {}; + if (domainObjectConditionalStyle) { + if (this.itemId) { + domainObjectConditionalStyle[this.itemId] = undefined; + delete domainObjectConditionalStyle[this.itemId]; + } else { + domainObjectConditionalStyle.conditionSetIdentifier = undefined; + delete domainObjectConditionalStyle.conditionSetIdentifier; + domainObjectConditionalStyle.styles = undefined; + delete domainObjectConditionalStyle.styles; + } + if (_.isEmpty(domainObjectConditionalStyle)) { + domainObjectConditionalStyle = undefined; + } + } + + this.persist(domainObjectConditionalStyle); + }, initializeConditionalStyles() { - const backgroundColors = [{backgroundColor: 'red'},{backgroundColor: 'orange'}, {backgroundColor: 'blue'}]; this.openmct.objects.get(this.conditionSetIdentifier).then((conditionSetDomainObject) => { conditionSetDomainObject.configuration.conditionCollection.forEach((conditionConfiguration, index) => { this.conditionalStyles.push({ conditionId: conditionConfiguration.id, conditionName: conditionConfiguration.name, - style: backgroundColors[index] + style: Object.assign({}, this.initialStyles) }); }); - this.persist({ - defaultStyle: this.defaultStyle || {backgroundColor: 'inherit'}, + let domainObjectConditionalStyle = (this.domainObject.configuration && this.domainObject.configuration.conditionalStyle) || {}; + let conditionalStyle = { conditionSetIdentifier: this.conditionSetIdentifier, styles: this.conditionalStyles - }); + }; + if (this.itemId) { + this.persist({ + ...domainObjectConditionalStyle, + [this.itemId]: conditionalStyle + }); + } else { + this.persist({ + ...domainObjectConditionalStyle, + ...conditionalStyle + }); + } }); }, findStyleByConditionId(id) { - for(let i=0, ii=this.conditionalStyles.length; i < ii; i++) { - if (this.conditionalStyles[i].conditionId === id) { - return { - index: i, - item: this.conditionalStyles[i] - }; + return this.conditionalStyles.find(conditionalStyle => conditionalStyle.conditionId === id); + }, + updateConditionalStyle(conditionStyle) { + let found = this.findStyleByConditionId(conditionStyle.conditionId); + if (found) { + found.style = conditionStyle.style; + let domainObjectConditionalStyle = this.domainObject.configuration.conditionalStyle || {}; + + if (this.itemId) { + let itemConditionalStyle = domainObjectConditionalStyle[this.itemId]; + if (itemConditionalStyle) { + this.persist({ + ...domainObjectConditionalStyle, + [this.itemId]: { + ...itemConditionalStyle, + styles: this.conditionalStyles + } + }); + } + } else { + domainObjectConditionalStyle.styles = this.conditionalStyles; + this.persist(domainObjectConditionalStyle); } } }, - updateConditionalStyle(conditionId, style) { - let found = this.findStyleByConditionId(conditionId); - if (found) { - this.conditionalStyles[found.index].style = style; - } - this.persist(undefined); - }, persist(conditionalStyle) { this.openmct.objects.mutate(this.domainObject, 'configuration.conditionalStyle', conditionalStyle); } diff --git a/src/plugins/condition/utils/styleUtils.js b/src/plugins/condition/utils/styleUtils.js new file mode 100644 index 0000000000..c4c3525e69 --- /dev/null +++ b/src/plugins/condition/utils/styleUtils.js @@ -0,0 +1,19 @@ +export const getStyleProp = (key, defaultValue) => { + let styleProp = undefined; + switch(key) { + case 'fill': styleProp = { + backgroundColor: defaultValue || 'none' + }; + break; + case 'stroke': styleProp = { + border: '1px solid ' + defaultValue || 'none' + }; + break; + case 'color': styleProp = { + color: defaultValue || 'inherit' + }; + break; + } + + return styleProp; +}; diff --git a/src/plugins/displayLayout/components/BoxView.vue b/src/plugins/displayLayout/components/BoxView.vue index 0214db0287..f1bf880ebd 100644 --- a/src/plugins/displayLayout/components/BoxView.vue +++ b/src/plugins/displayLayout/components/BoxView.vue @@ -36,6 +36,7 @@