diff --git a/package.json b/package.json index 9f1686c7b4..ac6116e3e6 100644 --- a/package.json +++ b/package.json @@ -79,6 +79,7 @@ "codemirror": "^5.49.0", "cpx": "^1.5.0", "deep-clone-simple": "^1.1.1", + "deep-freeze": "^0.0.1", "es6-object-assign": "^1.1.0", "fecha": "^3.0.2", "fuse.js": "^3.4.4", diff --git a/src/panels/lovelace/ha-panel-lovelace.ts b/src/panels/lovelace/ha-panel-lovelace.ts index f6bd26fb61..d31014fc74 100644 --- a/src/panels/lovelace/ha-panel-lovelace.ts +++ b/src/panels/lovelace/ha-panel-lovelace.ts @@ -1,4 +1,5 @@ import "@material/mwc-button"; +import * as deepFreeze from "deep-freeze"; import { fetchConfig, @@ -263,15 +264,22 @@ class LovelacePanel extends LitElement { private _checkLovelaceConfig(config: LovelaceConfig) { // Somehow there can be badges with value null, we remove those - config.views.forEach((view) => { - if (view.badges) { - view.badges = view.badges.filter(Boolean); + let checkedConfig; + config.views.forEach((view, index) => { + 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"]) { - this._checkLovelaceConfig(config); + config = this._checkLovelaceConfig(config); this.lovelace = { config, mode, @@ -295,7 +303,7 @@ class LovelacePanel extends LitElement { }, saveConfig: async (newConfig: LovelaceConfig): Promise => { const { config: previousConfig, mode: previousMode } = this.lovelace!; - this._checkLovelaceConfig(newConfig); + newConfig = this._checkLovelaceConfig(newConfig); try { // Optimistic update this._updateLovelace({ diff --git a/yarn.lock b/yarn.lock index 7e8b1d0c0a..f296ec0fe6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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" 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: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"