diff --git a/hassio/src/addon-view/config/hassio-addon-config.ts b/hassio/src/addon-view/config/hassio-addon-config.ts index 2e3e4ee0cd50..4fa442e3a3f9 100644 --- a/hassio/src/addon-view/config/hassio-addon-config.ts +++ b/hassio/src/addon-view/config/hassio-addon-config.ts @@ -21,6 +21,8 @@ import { HassioAddonSetOptionParams, setHassioAddonOption, } from "../../../../src/data/hassio/addon"; +import "../../../../src/components/buttons/ha-progress-button"; + import { showConfirmationDialog } from "../../../../src/dialogs/generic/show-dialog-box"; import { haStyle } from "../../../../src/resources/styles"; import type { HomeAssistant } from "../../../../src/types"; @@ -55,50 +57,20 @@ class HassioAddonConfig extends LitElement { ${valid ? "" : html`
Invalid YAML
`}
- + Reset to defaults - - + Save - +
`; } - static get styles(): CSSResult[] { - return [ - haStyle, - hassioStyle, - css` - :host { - display: block; - } - ha-card { - display: block; - } - .card-actions { - display: flex; - justify-content: space-between; - } - .errors { - color: var(--error-color); - margin-top: 16px; - } - iron-autogrow-textarea { - width: 100%; - font-family: monospace; - } - .syntaxerror { - color: var(--error-color); - } - `, - ]; - } - protected updated(changedProperties: PropertyValues): void { super.updated(changedProperties); if (changedProperties.has("addon")) { @@ -111,7 +83,10 @@ class HassioAddonConfig extends LitElement { this.requestUpdate(); } - private async _resetTapped(): Promise { + private async _resetTapped(ev: CustomEvent): Promise { + const button = ev.currentTarget as any; + button.progress = true; + const confirmed = await showConfirmationDialog(this, { title: this.addon.name, text: "Are you sure you want to reset all your options?", @@ -120,6 +95,7 @@ class HassioAddonConfig extends LitElement { }); if (!confirmed) { + button.progress = false; return; } @@ -141,9 +117,13 @@ class HassioAddonConfig extends LitElement { err.body?.message || err }`; } + button.progress = false; } - private async _saveTapped(): Promise { + private async _saveTapped(ev: CustomEvent): Promise { + const button = ev.currentTarget as any; + button.progress = true; + let data: HassioAddonSetOptionParams; this._error = undefined; try { @@ -163,14 +143,45 @@ class HassioAddonConfig extends LitElement { path: "options", }; fireEvent(this, "hass-api-called", eventdata); + if (this.addon?.state === "started") { + await suggestAddonRestart(this, this.hass, this.addon); + } } catch (err) { this._error = `Failed to save addon configuration, ${ err.body?.message || err }`; } - if (!this._error && this.addon?.state === "started") { - await suggestAddonRestart(this, this.hass, this.addon); - } + button.progress = false; + } + + static get styles(): CSSResult[] { + return [ + haStyle, + hassioStyle, + css` + :host { + display: block; + } + ha-card { + display: block; + } + .card-actions { + display: flex; + justify-content: space-between; + } + .errors { + color: var(--error-color); + margin-top: 16px; + } + iron-autogrow-textarea { + width: 100%; + font-family: monospace; + } + .syntaxerror { + color: var(--error-color); + } + `, + ]; } }