From d9d92c87668805c49d5831a45ecc9f8b7c124664 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Mon, 10 Dec 2018 11:38:18 +0100 Subject: [PATCH] Simplify Lovelace mode (#2243) --- src/panels/lovelace/ha-panel-lovelace.ts | 22 +++++++++------------- src/panels/lovelace/types.ts | 3 +-- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/panels/lovelace/ha-panel-lovelace.ts b/src/panels/lovelace/ha-panel-lovelace.ts index 6bc94a67c0..f6edee5e0b 100644 --- a/src/panels/lovelace/ha-panel-lovelace.ts +++ b/src/panels/lovelace/ha-panel-lovelace.ts @@ -10,6 +10,7 @@ import { LitElement, html, PropertyValues } from "@polymer/lit-element"; import { hassLocalizeLitMixin } from "../../mixins/lit-localize-mixin"; import { TemplateResult } from "lit-html"; import { showSaveDialog } from "./editor/show-save-config-dialog"; +import { generateLovelaceConfig } from "./common/generate-lovelace-config"; interface LovelacePanelConfig { mode: "yaml" | "storage"; @@ -121,12 +122,11 @@ class LovelacePanel extends hassLocalizeLitMixin(LitElement) { } private async _fetchConfig(force) { - let conf; - let gen: boolean; + let conf: LovelaceConfig; + let confMode: Lovelace["mode"] = this.panel!.config.mode; try { conf = await fetchConfig(this.hass!, force); - gen = false; } catch (err) { if (err.code !== "config_not_found") { // tslint:disable-next-line @@ -135,21 +135,17 @@ class LovelacePanel extends hassLocalizeLitMixin(LitElement) { this._errorMsg = err.message; return; } - const { - generateLovelaceConfig, - } = await import("./common/generate-lovelace-config"); conf = generateLovelaceConfig(this.hass!, this.localize); - gen = true; + confMode = "generated"; } this._state = "loaded"; this.lovelace = { config: conf, - autoGen: gen, editMode: this.lovelace ? this.lovelace.editMode : false, - mode: this.panel!.config.mode, + mode: confMode, setEditMode: (editMode: boolean) => { - if (!editMode || !this.lovelace!.autoGen) { + if (!editMode || this.lovelace!.mode !== "generated") { this._updateLovelace({ editMode }); return; } @@ -158,16 +154,16 @@ class LovelacePanel extends hassLocalizeLitMixin(LitElement) { }); }, saveConfig: async (newConfig: LovelaceConfig): Promise => { - const { config, autoGen } = this.lovelace!; + const { config, mode } = this.lovelace!; try { // Optimistic update - this._updateLovelace({ config: newConfig, autoGen: false }); + this._updateLovelace({ config: newConfig, mode: "storage" }); await saveConfig(this.hass!, newConfig); } catch (err) { // tslint:disable-next-line console.error(err); // Rollback the optimistic update - this._updateLovelace({ config, autoGen }); + this._updateLovelace({ config, mode }); throw err; } }, diff --git a/src/panels/lovelace/types.ts b/src/panels/lovelace/types.ts index 52a7a6bb31..33d7cfec6d 100644 --- a/src/panels/lovelace/types.ts +++ b/src/panels/lovelace/types.ts @@ -4,8 +4,7 @@ import { LovelaceCardConfig, LovelaceConfig } from "../../data/lovelace"; export interface Lovelace { config: LovelaceConfig; editMode: boolean; - autoGen: boolean; - mode: "yaml" | "storage"; + mode: "generated" | "yaml" | "storage"; setEditMode: (editMode: boolean) => void; saveConfig: (newConfig: LovelaceConfig) => Promise; }