Blink entities only if their values have actually changed
This commit is contained in:
parent
211372e472
commit
7fac5392b8
2 changed files with 54 additions and 3 deletions
|
@ -26,6 +26,16 @@ export default {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
methods: {
|
||||||
|
valuesEqual(a, b) {
|
||||||
|
a = {...a}
|
||||||
|
b = {...b}
|
||||||
|
delete a.updated_at
|
||||||
|
delete b.updated_at
|
||||||
|
return this.objectsEqual(a, b)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
if (this.type !== 'Entity') {
|
if (this.type !== 'Entity') {
|
||||||
const type = this.type.split('_').map((t) =>
|
const type = this.type.split('_').map((t) =>
|
||||||
|
@ -34,7 +44,10 @@ export default {
|
||||||
|
|
||||||
this.$watch(
|
this.$watch(
|
||||||
() => this.value,
|
() => this.value,
|
||||||
() => {
|
(newValue, oldValue) => {
|
||||||
|
if (this.valuesEqual(oldValue, newValue))
|
||||||
|
return false
|
||||||
|
|
||||||
this.justUpdated = true
|
this.justUpdated = true
|
||||||
const self = this;
|
const self = this;
|
||||||
setTimeout(() => self.justUpdated = false, 1000)
|
setTimeout(() => self.justUpdated = false, 1000)
|
||||||
|
@ -63,8 +76,16 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes blink-animation {
|
@keyframes blink-animation {
|
||||||
to {
|
0% {
|
||||||
|
background: initial
|
||||||
|
}
|
||||||
|
|
||||||
|
50% {
|
||||||
background: $active-bg;
|
background: $active-bg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
100% {
|
||||||
|
background: initial
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
@ -36,7 +36,37 @@ export default {
|
||||||
})
|
})
|
||||||
|
|
||||||
return `${value.toFixed(2)} ${unit}`
|
return `${value.toFixed(2)} ${unit}`
|
||||||
}
|
},
|
||||||
|
|
||||||
|
objectsEqual(a, b) {
|
||||||
|
if (typeof(a) !== 'object' || typeof(b) !== 'object')
|
||||||
|
return false
|
||||||
|
|
||||||
|
for (const p of Object.keys(a || {})) {
|
||||||
|
switch(typeof(a[p])) {
|
||||||
|
case 'object':
|
||||||
|
if (!this.objectsEqual(a[p], b[p]))
|
||||||
|
return false
|
||||||
|
break
|
||||||
|
|
||||||
|
case 'function':
|
||||||
|
if (a[p].toString() != b[p]?.toString())
|
||||||
|
return false
|
||||||
|
break
|
||||||
|
|
||||||
|
default:
|
||||||
|
if (a[p] != b[p])
|
||||||
|
return false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const p of Object.keys(b || {}))
|
||||||
|
if (a[p] == null && b[p] != null)
|
||||||
|
return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Reference in a new issue