From f4dc74b2e8d1bcc9659ed667e58ca11ea85baef3 Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Tue, 13 Sep 2022 19:59:35 +0200 Subject: [PATCH] Show confirm dialog when clicking traces (#13716) --- .../config/automation/ha-automation-editor.ts | 72 ++++++++---------- src/panels/config/script/ha-script-editor.ts | 73 ++++++++----------- 2 files changed, 63 insertions(+), 82 deletions(-) diff --git a/src/panels/config/automation/ha-automation-editor.ts b/src/panels/config/automation/ha-automation-editor.ts index f61b1f6438..14f34c7f6b 100644 --- a/src/panels/config/automation/ha-automation-editor.ts +++ b/src/panels/config/automation/ha-automation-editor.ts @@ -31,7 +31,6 @@ import { classMap } from "lit/directives/class-map"; import { fireEvent } from "../../../common/dom/fire_event"; import { navigate } from "../../../common/navigate"; import { copyToClipboard } from "../../../common/util/copy-clipboard"; -import { afterNextRender } from "../../../common/util/render-status"; import "../../../components/ha-button-menu"; import "../../../components/ha-card"; import "../../../components/ha-fab"; @@ -135,17 +134,11 @@ export class HaAutomationEditor extends KeyboardShortcutMixin(LitElement) { > ${this._config?.id && !this.narrow ? html` - - - ${this.hass.localize( - "ui.panel.config.automation.editor.show_trace" - )} - - + + ${this.hass.localize( + "ui.panel.config.automation.editor.show_trace" + )} + ` : ""} @@ -486,6 +479,15 @@ export class HaAutomationEditor extends KeyboardShortcutMixin(LitElement) { fireEvent(this, "hass-more-info", { entityId: this._entityId }); } + private async _showTrace() { + if (this._config?.id) { + const result = await this.confirmUnsavedChanged(); + if (result) { + navigate(`/config/automation/trace/${this._config.id}`); + } + } + } + private _runActions() { if (!this.hass || !this._entityId) { return; @@ -535,44 +537,35 @@ export class HaAutomationEditor extends KeyboardShortcutMixin(LitElement) { this._dirty = true; } - private _backTapped = (): void => { + private async confirmUnsavedChanged(): Promise { if (this._dirty) { - showConfirmationDialog(this, { + return showConfirmationDialog(this, { text: this.hass!.localize( "ui.panel.config.automation.editor.unsaved_confirm" ), confirmText: this.hass!.localize("ui.common.leave"), dismissText: this.hass!.localize("ui.common.stay"), - confirm: () => { - afterNextRender(() => history.back()); - }, }); - } else { - afterNextRender(() => history.back()); + } + return true; + } + + private _backTapped = async () => { + const result = await this.confirmUnsavedChanged(); + if (result) { + history.back(); } }; private async _duplicate() { - if (this._dirty) { - if ( - !(await showConfirmationDialog(this, { - text: this.hass!.localize( - "ui.panel.config.automation.editor.unsaved_confirm" - ), - confirmText: this.hass!.localize("ui.common.leave"), - dismissText: this.hass!.localize("ui.common.stay"), - })) - ) { - return; - } - // Wait for dialog to complete closing - await new Promise((resolve) => setTimeout(resolve, 0)); + const result = await this.confirmUnsavedChanged(); + if (result) { + showAutomationEditor({ + ...this._config, + id: undefined, + alias: undefined, + }); } - showAutomationEditor({ - ...this._config, - id: undefined, - alias: undefined, - }); } private async _deleteConfirm() { @@ -689,9 +682,6 @@ export class HaAutomationEditor extends KeyboardShortcutMixin(LitElement) { flex-direction: column; padding-bottom: 0; } - .trace-link { - text-decoration: none; - } manual-automation-editor, blueprint-automation-editor { margin: 0 auto; diff --git a/src/panels/config/script/ha-script-editor.ts b/src/panels/config/script/ha-script-editor.ts index 004547ea28..d39e81a473 100644 --- a/src/panels/config/script/ha-script-editor.ts +++ b/src/panels/config/script/ha-script-editor.ts @@ -184,17 +184,11 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) { > ${this.scriptEntityId && !this.narrow ? html` - - - ${this.hass.localize( - "ui.panel.config.script.editor.show_trace" - )} - - + + ${this.hass.localize( + "ui.panel.config.script.editor.show_trace" + )} + ` : ""} @@ -530,6 +524,15 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) { fireEvent(this, "hass-more-info", { entityId: this.scriptEntityId }); } + private async _showTrace() { + if (this.scriptEntityId) { + const result = await this.confirmUnsavedChanged(); + if (result) { + navigate(`/config/script/trace/${this.scriptEntityId}`); + } + } + } + private async _runScript(ev: CustomEvent) { ev.stopPropagation(); await triggerScript(this.hass, this.scriptEntityId as string); @@ -660,45 +663,36 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) { this._dirty = true; } - private _backTapped = (): void => { + private async confirmUnsavedChanged(): Promise { if (this._dirty) { - showConfirmationDialog(this, { + return showConfirmationDialog(this, { text: this.hass!.localize( - "ui.panel.config.common.editor.confirm_unsaved" + "ui.panel.config.automation.editor.unsaved_confirm" ), confirmText: this.hass!.localize("ui.common.leave"), dismissText: this.hass!.localize("ui.common.stay"), - confirm: () => { - setTimeout(() => history.back()); - }, }); - } else { + } + return true; + } + + private _backTapped = async () => { + const result = await this.confirmUnsavedChanged(); + if (result) { history.back(); } }; private async _duplicate() { - if (this._dirty) { - if ( - !(await showConfirmationDialog(this, { - text: this.hass!.localize( - "ui.panel.config.common.editor.confirm_unsaved" - ), - confirmText: this.hass!.localize("ui.common.yes"), - dismissText: this.hass!.localize("ui.common.no"), - })) - ) { - return; - } - // Wait for dialog to complete closing - await new Promise((resolve) => setTimeout(resolve, 0)); + const result = await this.confirmUnsavedChanged(); + if (result) { + showScriptEditor({ + ...this._config, + alias: `${this._config?.alias} (${this.hass.localize( + "ui.panel.config.script.picker.duplicate" + )})`, + }); } - showScriptEditor({ - ...this._config, - alias: `${this._config?.alias} (${this.hass.localize( - "ui.panel.config.script.picker.duplicate" - )})`, - }); } private async _deleteConfirm() { @@ -840,9 +834,6 @@ export class HaScriptEditor extends KeyboardShortcutMixin(LitElement) { .header a { color: var(--secondary-text-color); } - .trace-link { - text-decoration: none; - } ha-button-menu a { text-decoration: none; color: var(--primary-color);