From be0bef3f1b2380ae4a771b8a6c4f0fcd6ed63597 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Thu, 16 May 2019 17:44:46 +0200 Subject: [PATCH] Allow automation/script delete (#3194) --- src/data/automation.ts | 4 +++ src/data/script.ts | 3 ++ .../config/automation/ha-automation-editor.ts | 29 +++++++++++++++---- .../config/automation/ha-automation-picker.ts | 5 +++- src/panels/config/script/ha-script-editor.js | 17 ++++++++++- src/panels/config/script/ha-script-picker.ts | 5 +++- 6 files changed, 55 insertions(+), 8 deletions(-) diff --git a/src/data/automation.ts b/src/data/automation.ts index ab1cb44cbb..ad968cc1df 100644 --- a/src/data/automation.ts +++ b/src/data/automation.ts @@ -2,6 +2,7 @@ import { HassEntityBase, HassEntityAttributeBase, } from "home-assistant-js-websocket"; +import { HomeAssistant } from "../types"; export interface AutomationEntity extends HassEntityBase { attributes: HassEntityAttributeBase & { @@ -16,3 +17,6 @@ export interface AutomationConfig { condition?: any[]; action: any[]; } + +export const deleteAutomation = (hass: HomeAssistant, id: string) => + hass.callApi("DELETE", `config/automation/config/${id}`); diff --git a/src/data/script.ts b/src/data/script.ts index f6820be973..a86a62a153 100644 --- a/src/data/script.ts +++ b/src/data/script.ts @@ -12,3 +12,6 @@ export const triggerScript = ( entityId: string, variables?: {} ) => hass.callService("script", computeObjectId(entityId), variables); + +export const deleteScript = (hass: HomeAssistant, objectId: string) => + hass.callApi("DELETE", `config/script/config/${objectId}`); diff --git a/src/panels/config/automation/ha-automation-editor.ts b/src/panels/config/automation/ha-automation-editor.ts index dfc7b8d632..78f9ae8e69 100644 --- a/src/panels/config/automation/ha-automation-editor.ts +++ b/src/panels/config/automation/ha-automation-editor.ts @@ -24,7 +24,11 @@ import computeStateName from "../../../common/entity/compute_state_name"; import { haStyle } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; -import { AutomationEntity, AutomationConfig } from "../../../data/automation"; +import { + AutomationEntity, + AutomationConfig, + deleteAutomation, +} from "../../../data/automation"; import { navigate } from "../../../common/navigate"; import { computeRTL } from "../../../common/util/compute_rtl"; @@ -33,8 +37,8 @@ function AutomationEditor(mountEl, props, mergeEl) { } class HaAutomationEditor extends LitElement { - public hass?: HomeAssistant; - public automation?: AutomationEntity; + public hass!: HomeAssistant; + public automation!: AutomationEntity; public isWide?: boolean; public creatingNew?: boolean; private _config?: AutomationConfig; @@ -85,6 +89,14 @@ class HaAutomationEditor extends LitElement { "ui.panel.config.automation.editor.default_name" )} + ${this.creatingNew + ? "" + : html` + + `} @@ -184,7 +196,6 @@ class HaAutomationEditor extends LitElement { this._config = config; this._errors = undefined; this._dirty = true; - // this._updateComponent(); } private _backTapped(): void { @@ -199,10 +210,18 @@ class HaAutomationEditor extends LitElement { history.back(); } + private async _delete() { + if (!confirm("Are you sure you want to delete this automation?")) { + return; + } + await deleteAutomation(this.hass, this.automation.attributes.id!); + history.back(); + } + private _saveAutomation(): void { const id = this.creatingNew ? "" + Date.now() - : this.automation!.attributes.id; + : this.automation.attributes.id; this.hass!.callApi( "POST", "config/automation/config/" + id, diff --git a/src/panels/config/automation/ha-automation-picker.ts b/src/panels/config/automation/ha-automation-picker.ts index d8c6259bfb..b0ef0ba577 100644 --- a/src/panels/config/automation/ha-automation-picker.ts +++ b/src/panels/config/automation/ha-automation-picker.ts @@ -26,6 +26,7 @@ import { HomeAssistant } from "../../../types"; import { AutomationEntity } from "../../../data/automation"; import format_date_time from "../../../common/datetime/format_date_time"; import { fireEvent } from "../../../common/dom/fire_event"; +import { repeat } from "lit-html/directives/repeat"; @customElement("ha-automation-picker") class HaAutomationPicker extends LitElement { @@ -73,7 +74,9 @@ class HaAutomationPicker extends LitElement {

` - : this.automations.map( + : repeat( + this.automations, + (automation) => automation.entity_id, (automation) => html`
diff --git a/src/panels/config/script/ha-script-editor.js b/src/panels/config/script/ha-script-editor.js index bf1d016f9f..5b550094f7 100644 --- a/src/panels/config/script/ha-script-editor.js +++ b/src/panels/config/script/ha-script-editor.js @@ -18,6 +18,7 @@ import NavigateMixin from "../../../mixins/navigate-mixin"; import LocalizeMixin from "../../../mixins/localize-mixin"; import { computeRTL } from "../../../common/util/compute_rtl"; +import { deleteScript } from "../../../data/script"; function ScriptEditor(mountEl, props, mergeEl) { return render(h(Script, props), mountEl, mergeEl); @@ -99,7 +100,13 @@ class HaScriptEditor extends LocalizeMixin(NavigateMixin(PolymerElement)) { -
Script [[computeName(script)]]
+
Script [[computeName(script)]]
+
@@ -273,6 +280,14 @@ class HaScriptEditor extends LocalizeMixin(NavigateMixin(PolymerElement)) { }); } + async _delete() { + if (!confirm("Are you sure you want to delete this script?")) { + return; + } + await deleteScript(this.hass, computeObjectId(this.script.entity_id)); + history.back(); + } + saveScript() { var id = this.creatingNew ? "" + Date.now() diff --git a/src/panels/config/script/ha-script-picker.ts b/src/panels/config/script/ha-script-picker.ts index bdba5f7621..570cc2faa1 100644 --- a/src/panels/config/script/ha-script-picker.ts +++ b/src/panels/config/script/ha-script-picker.ts @@ -25,6 +25,7 @@ import { haStyle } from "../../../resources/styles"; import { HomeAssistant } from "../../../types"; import { triggerScript } from "../../../data/script"; import { showToast } from "../../../util/toast"; +import { repeat } from "lit-html/directives/repeat"; @customElement("ha-script-picker") class HaScriptPicker extends LitElement { @@ -56,7 +57,9 @@ class HaScriptPicker extends LitElement {

We couldn't find any scripts.

` - : this.scripts.map( + : repeat( + this.scripts, + (script) => script.entity_id, (script) => html`