diff --git a/hassio/src/addon-view/config/hassio-addon-config.ts b/hassio/src/addon-view/config/hassio-addon-config.ts index 2e3e4ee0cd..4fa442e3a3 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,20 +57,103 @@ class HassioAddonConfig extends LitElement { ${valid ? "" : html`
Invalid YAML
`}
- + Reset to defaults - - + Save - +
`; } + protected updated(changedProperties: PropertyValues): void { + super.updated(changedProperties); + if (changedProperties.has("addon")) { + this._editor.setValue(this.addon.options); + } + } + + private _configChanged(): void { + this._configHasChanged = true; + this.requestUpdate(); + } + + 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?", + confirmText: "reset options", + dismissText: "no", + }); + + if (!confirmed) { + button.progress = false; + return; + } + + this._error = undefined; + const data: HassioAddonSetOptionParams = { + options: null, + }; + try { + await setHassioAddonOption(this.hass, this.addon.slug, data); + this._configHasChanged = false; + const eventdata = { + success: true, + response: undefined, + path: "options", + }; + fireEvent(this, "hass-api-called", eventdata); + } catch (err) { + this._error = `Failed to reset addon configuration, ${ + err.body?.message || err + }`; + } + button.progress = false; + } + + private async _saveTapped(ev: CustomEvent): Promise { + const button = ev.currentTarget as any; + button.progress = true; + + let data: HassioAddonSetOptionParams; + this._error = undefined; + try { + data = { + options: this._editor.value, + }; + } catch (err) { + this._error = err; + return; + } + try { + await setHassioAddonOption(this.hass, this.addon.slug, data); + this._configHasChanged = false; + const eventdata = { + success: true, + response: undefined, + 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 + }`; + } + button.progress = false; + } + static get styles(): CSSResult[] { return [ haStyle, @@ -98,80 +183,6 @@ class HassioAddonConfig extends LitElement { `, ]; } - - protected updated(changedProperties: PropertyValues): void { - super.updated(changedProperties); - if (changedProperties.has("addon")) { - this._editor.setValue(this.addon.options); - } - } - - private _configChanged(): void { - this._configHasChanged = true; - this.requestUpdate(); - } - - private async _resetTapped(): Promise { - const confirmed = await showConfirmationDialog(this, { - title: this.addon.name, - text: "Are you sure you want to reset all your options?", - confirmText: "reset options", - dismissText: "no", - }); - - if (!confirmed) { - return; - } - - this._error = undefined; - const data: HassioAddonSetOptionParams = { - options: null, - }; - try { - await setHassioAddonOption(this.hass, this.addon.slug, data); - this._configHasChanged = false; - const eventdata = { - success: true, - response: undefined, - path: "options", - }; - fireEvent(this, "hass-api-called", eventdata); - } catch (err) { - this._error = `Failed to reset addon configuration, ${ - err.body?.message || err - }`; - } - } - - private async _saveTapped(): Promise { - let data: HassioAddonSetOptionParams; - this._error = undefined; - try { - data = { - options: this._editor.value, - }; - } catch (err) { - this._error = err; - return; - } - try { - await setHassioAddonOption(this.hass, this.addon.slug, data); - this._configHasChanged = false; - const eventdata = { - success: true, - response: undefined, - path: "options", - }; - fireEvent(this, "hass-api-called", eventdata); - } 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); - } - } } declare global {