mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-19 07:16:39 +00:00
Freeze lovelace configuration on load (#4862)
* Freeze lovelace configuration on load * Clone only when necessary * Make cloning badges really work * Freeze after checking * Don't doublefreeze
This commit is contained in:
parent
7903541689
commit
c62a5a6dcd
@ -79,6 +79,7 @@
|
|||||||
"codemirror": "^5.49.0",
|
"codemirror": "^5.49.0",
|
||||||
"cpx": "^1.5.0",
|
"cpx": "^1.5.0",
|
||||||
"deep-clone-simple": "^1.1.1",
|
"deep-clone-simple": "^1.1.1",
|
||||||
|
"deep-freeze": "^0.0.1",
|
||||||
"es6-object-assign": "^1.1.0",
|
"es6-object-assign": "^1.1.0",
|
||||||
"fecha": "^3.0.2",
|
"fecha": "^3.0.2",
|
||||||
"fuse.js": "^3.4.4",
|
"fuse.js": "^3.4.4",
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import "@material/mwc-button";
|
import "@material/mwc-button";
|
||||||
|
import * as deepFreeze from "deep-freeze";
|
||||||
|
|
||||||
import {
|
import {
|
||||||
fetchConfig,
|
fetchConfig,
|
||||||
@ -263,15 +264,22 @@ class LovelacePanel extends LitElement {
|
|||||||
|
|
||||||
private _checkLovelaceConfig(config: LovelaceConfig) {
|
private _checkLovelaceConfig(config: LovelaceConfig) {
|
||||||
// Somehow there can be badges with value null, we remove those
|
// Somehow there can be badges with value null, we remove those
|
||||||
config.views.forEach((view) => {
|
let checkedConfig;
|
||||||
if (view.badges) {
|
config.views.forEach((view, index) => {
|
||||||
view.badges = view.badges.filter(Boolean);
|
if (view.badges && !view.badges.every(Boolean)) {
|
||||||
|
checkedConfig = checkedConfig || {
|
||||||
|
...config,
|
||||||
|
views: [...config.views],
|
||||||
|
};
|
||||||
|
checkedConfig.views[index] = { ...view };
|
||||||
|
checkedConfig.views[index].badges = view.badges.filter(Boolean);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
return checkedConfig ? deepFreeze(checkedConfig) : config;
|
||||||
}
|
}
|
||||||
|
|
||||||
private _setLovelaceConfig(config: LovelaceConfig, mode: Lovelace["mode"]) {
|
private _setLovelaceConfig(config: LovelaceConfig, mode: Lovelace["mode"]) {
|
||||||
this._checkLovelaceConfig(config);
|
config = this._checkLovelaceConfig(config);
|
||||||
this.lovelace = {
|
this.lovelace = {
|
||||||
config,
|
config,
|
||||||
mode,
|
mode,
|
||||||
@ -295,7 +303,7 @@ class LovelacePanel extends LitElement {
|
|||||||
},
|
},
|
||||||
saveConfig: async (newConfig: LovelaceConfig): Promise<void> => {
|
saveConfig: async (newConfig: LovelaceConfig): Promise<void> => {
|
||||||
const { config: previousConfig, mode: previousMode } = this.lovelace!;
|
const { config: previousConfig, mode: previousMode } = this.lovelace!;
|
||||||
this._checkLovelaceConfig(newConfig);
|
newConfig = this._checkLovelaceConfig(newConfig);
|
||||||
try {
|
try {
|
||||||
// Optimistic update
|
// Optimistic update
|
||||||
this._updateLovelace({
|
this._updateLovelace({
|
||||||
|
@ -5403,6 +5403,11 @@ deep-extend@^0.6.0, deep-extend@~0.6.0:
|
|||||||
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
|
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
|
||||||
integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
|
integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
|
||||||
|
|
||||||
|
deep-freeze@^0.0.1:
|
||||||
|
version "0.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/deep-freeze/-/deep-freeze-0.0.1.tgz#3a0b0005de18672819dfd38cd31f91179c893e84"
|
||||||
|
integrity sha1-OgsABd4YZygZ39OM0x+RF5yJPoQ=
|
||||||
|
|
||||||
deep-is@~0.1.3:
|
deep-is@~0.1.3:
|
||||||
version "0.1.3"
|
version "0.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
|
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user