From 3263d84def3d182ed3a6aa676ff66418028245c9 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Thu, 17 Jan 2019 20:07:05 +0100 Subject: [PATCH] Deep clone config (#2496) --- package.json | 1 + src/panels/lovelace/common/create-card-element.ts | 4 +++- src/panels/lovelace/common/create-hui-element.ts | 4 +++- src/panels/lovelace/common/create-row-element.ts | 4 +++- src/panels/lovelace/editor/card-editor/hui-card-preview.ts | 4 +++- yarn.lock | 5 +++++ 6 files changed, 18 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 0d99d08d7d..300b3d44ce 100644 --- a/package.json +++ b/package.json @@ -68,6 +68,7 @@ "@webcomponents/webcomponentsjs": "^2.2.0", "chart.js": "~2.7.2", "chartjs-chart-timeline": "^0.2.1", + "deep-clone-simple": "^1.1.1", "es6-object-assign": "^1.1.0", "eslint-import-resolver-webpack": "^0.10.1", "fecha": "^2.3.3", diff --git a/src/panels/lovelace/common/create-card-element.ts b/src/panels/lovelace/common/create-card-element.ts index f10d5bd9b5..9f18c0596d 100644 --- a/src/panels/lovelace/common/create-card-element.ts +++ b/src/panels/lovelace/common/create-card-element.ts @@ -1,3 +1,5 @@ +import deepClone from "deep-clone-simple"; + import { fireEvent } from "../../../common/dom/fire_event"; import "../cards/hui-alarm-panel-card"; @@ -68,7 +70,7 @@ const _createElement = ( ): LovelaceCard | HuiErrorCard => { const element = document.createElement(tag) as LovelaceCard; try { - element.setConfig(config); + element.setConfig(deepClone(config)); } catch (err) { // tslint:disable-next-line console.error(tag, err); diff --git a/src/panels/lovelace/common/create-hui-element.ts b/src/panels/lovelace/common/create-hui-element.ts index 8b15a4fec1..8ddff95a83 100644 --- a/src/panels/lovelace/common/create-hui-element.ts +++ b/src/panels/lovelace/common/create-hui-element.ts @@ -1,3 +1,5 @@ +import deepClone from "deep-clone-simple"; + import "../elements/hui-icon-element"; import "../elements/hui-image-element"; import "../elements/hui-service-button-element"; @@ -30,7 +32,7 @@ const _createElement = ( ): LovelaceElement | HuiErrorCard => { const element = document.createElement(tag) as LovelaceElement; try { - element.setConfig(config); + element.setConfig(deepClone(config)); } catch (err) { // tslint:disable-next-line console.error(tag, err); diff --git a/src/panels/lovelace/common/create-row-element.ts b/src/panels/lovelace/common/create-row-element.ts index 9f0aa654f8..feafcb8952 100644 --- a/src/panels/lovelace/common/create-row-element.ts +++ b/src/panels/lovelace/common/create-row-element.ts @@ -1,3 +1,5 @@ +import deepClone from "deep-clone-simple"; + import { fireEvent } from "../../../common/dom/fire_event"; import { @@ -64,7 +66,7 @@ const _createElement = ( ): EntityRow | HuiErrorCard => { const element = document.createElement(tag) as EntityRow; try { - element.setConfig(config); + element.setConfig(deepClone(config)); } catch (err) { // tslint:disable-next-line console.error(tag, err); diff --git a/src/panels/lovelace/editor/card-editor/hui-card-preview.ts b/src/panels/lovelace/editor/card-editor/hui-card-preview.ts index 7f037282df..b143bff434 100644 --- a/src/panels/lovelace/editor/card-editor/hui-card-preview.ts +++ b/src/panels/lovelace/editor/card-editor/hui-card-preview.ts @@ -1,5 +1,7 @@ import "@polymer/paper-input/paper-textarea"; +import deepClone from "deep-clone-simple"; + import { createCardElement } from "../../common/create-card-element"; import { HomeAssistant } from "../../../../types"; import { LovelaceCardConfig } from "../../../../data/lovelace"; @@ -42,7 +44,7 @@ export class HuiCardPreview extends HTMLElement { if (tag.toUpperCase() === this._element.tagName) { try { - this._element.setConfig(configValue); + this._element.setConfig(deepClone(configValue)); } catch (err) { this._createCard(createErrorCardConfig(err.message, configValue)); } diff --git a/yarn.lock b/yarn.lock index a4ca8e389e..3fa6841247 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4866,6 +4866,11 @@ dedent@^0.7.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= +deep-clone-simple@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-clone-simple/-/deep-clone-simple-1.1.1.tgz#0ec358dfcce062928dbf58f0dfa484b4b5425d59" + integrity sha1-DsNY38zgYpKNv1jw36SEtLVCXVk= + deep-eql@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2"