From 0489d8922e17f5f7147aa1c8bb8e6487ba314207 Mon Sep 17 00:00:00 2001 From: Paul Bottein Date: Thu, 5 Oct 2023 11:24:43 +0200 Subject: [PATCH] Use restart dialog confirmation for quick command (#18113) --- src/dialogs/quick-bar/ha-quick-bar.ts | 53 +++++++++++++-------------- src/translations/en.json | 5 +++ 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/src/dialogs/quick-bar/ha-quick-bar.ts b/src/dialogs/quick-bar/ha-quick-bar.ts index a8120a27ea..07d823858d 100644 --- a/src/dialogs/quick-bar/ha-quick-bar.ts +++ b/src/dialogs/quick-bar/ha-quick-bar.ts @@ -8,7 +8,7 @@ import { mdiReload, mdiServerNetwork, } from "@mdi/js"; -import { css, html, LitElement, nothing } from "lit"; +import { LitElement, css, html, nothing } from "lit"; import { customElement, property, query, state } from "lit/decorators"; import { ifDefined } from "lit/directives/if-defined"; import { styleMap } from "lit/directives/style-map"; @@ -23,8 +23,8 @@ import { domainIcon } from "../../common/entity/domain_icon"; import { navigate } from "../../common/navigate"; import { caseInsensitiveStringCompare } from "../../common/string/compare"; import { - fuzzyFilterSort, ScorableTextItem, + fuzzyFilterSort, } from "../../common/string/filter/sequence-matching"; import { debounce } from "../../common/util/debounce"; import "../../components/ha-chip"; @@ -40,10 +40,7 @@ import { configSections } from "../../panels/config/ha-panel-config"; import { haStyleDialog, haStyleScrollbar } from "../../resources/styles"; import { loadVirtualizer } from "../../resources/virtualizer"; import { HomeAssistant } from "../../types"; -import { - ConfirmationDialogParams, - showConfirmationDialog, -} from "../generic/show-dialog-box"; +import { showConfirmationDialog } from "../generic/show-dialog-box"; import { QuickBarParams } from "./show-dialog-quick-bar"; interface QuickBarItem extends ScorableTextItem { @@ -602,16 +599,30 @@ export class QuickBar extends LitElement { `ui.dialogs.quick-bar.commands.types.${categoryKey}` ), categoryKey, - action: () => this.hass.callService("homeassistant", action), + action: async () => { + const confirmed = await showConfirmationDialog(this, { + title: this.hass.localize( + `ui.dialogs.restart.${action}.confirm_title` + ), + text: this.hass.localize( + `ui.dialogs.restart.${action}.confirm_description` + ), + confirmText: this.hass.localize( + `ui.dialogs.restart.${action}.confirm_action` + ), + destructive: true, + }); + if (!confirmed) { + return; + } + this.hass.callService("homeassistant", action); + }, }; - return this._generateConfirmationCommand( - { - ...item, - strings: [`${item.categoryText} ${item.primaryText}`], - }, - this.hass.localize("ui.dialogs.generic.ok") - ); + return { + ...item, + strings: [`${item.categoryText} ${item.primaryText}`], + }; }); } @@ -717,20 +728,6 @@ export class QuickBar extends LitElement { return undefined; } - private _generateConfirmationCommand( - item: CommandItem, - confirmText: ConfirmationDialogParams["confirmText"] - ): CommandItem { - return { - ...item, - action: () => - showConfirmationDialog(this, { - confirmText, - confirm: item.action, - }), - }; - } - private _finalizeNavigationCommands( items: BaseNavigationCommand[] ): CommandItem[] { diff --git a/src/translations/en.json b/src/translations/en.json index 3c9bfce684..6d66fb31c4 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -1203,6 +1203,11 @@ "confirm_action": "Restart", "failed": "Failed to restart Home Assistant" }, + "stop": { + "confirm_title": "Stop Home Assistant?", + "confirm_description": "This will interrupt all running automations and scripts.", + "confirm_action": "Stop" + }, "reboot": { "title": "Reboot system", "description": "Restart the system running Home Assistant and all Add-ons.",