diff --git a/hassio/src/addon-view/config/hassio-addon-config.ts b/hassio/src/addon-view/config/hassio-addon-config.ts index 56ebbfa5f5..9bbc6ac782 100644 --- a/hassio/src/addon-view/config/hassio-addon-config.ts +++ b/hassio/src/addon-view/config/hassio-addon-config.ts @@ -262,6 +262,11 @@ class HassioAddonConfig extends LitElement { private async _saveTapped(ev: CustomEvent): Promise { const button = ev.currentTarget as any; + const eventdata = { + success: true, + response: undefined, + path: "options", + }; button.progress = true; this._error = undefined; @@ -272,23 +277,19 @@ class HassioAddonConfig extends LitElement { }); 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.supervisor, this.addon); } } catch (err) { this._error = this.supervisor.localize( - "addon.configuration.options.failed_to_save", + "addon.failed_to_save", "error", extractApiErrorMessage(err) ); + eventdata.success = false; } button.progress = false; + fireEvent(this, "hass-api-called", eventdata); } static get styles(): CSSResult[] { diff --git a/hassio/src/addon-view/hassio-addon-dashboard.ts b/hassio/src/addon-view/hassio-addon-dashboard.ts index 6287c7907d..5113aa3bdb 100644 --- a/hassio/src/addon-view/hassio-addon-dashboard.ts +++ b/hassio/src/addon-view/hassio-addon-dashboard.ts @@ -191,6 +191,10 @@ class HassioAddonDashboard extends LitElement { } private async _apiCalled(ev): Promise { + if (!ev.detail.success) { + return; + } + const pathSplit: string[] = ev.detail.path?.split("/"); if (!pathSplit || pathSplit.length === 0) { diff --git a/src/data/hassio/addon.ts b/src/data/hassio/addon.ts index e403d28ba7..902bd88816 100644 --- a/src/data/hassio/addon.ts +++ b/src/data/hassio/addon.ts @@ -2,7 +2,11 @@ import { atLeastVersion } from "../../common/config/version"; import { HaFormSchema } from "../../components/ha-form/ha-form"; import { HomeAssistant } from "../../types"; import { SupervisorArch } from "../supervisor/supervisor"; -import { hassioApiResultExtractor, HassioResponse } from "./common"; +import { + extractApiErrorMessage, + hassioApiResultExtractor, + HassioResponse, +} from "./common"; export type AddonStage = "stable" | "experimental" | "deprecated"; export type AddonAppArmour = "disable" | "default" | "profile"; @@ -186,16 +190,20 @@ export const setHassioAddonOption = async ( data: HassioAddonSetOptionParams ) => { if (atLeastVersion(hass.config.version, 2021, 2, 4)) { - await hass.callWS({ + const response = await hass.callWS>({ type: "supervisor/api", endpoint: `/addons/${slug}/options`, method: "post", data, }); - return; + + if (response.result === "error") { + throw Error(extractApiErrorMessage(response)); + } + return response; } - await hass.callApi>( + return hass.callApi>( "POST", `hassio/addons/${slug}/options`, data diff --git a/src/data/hassio/common.ts b/src/data/hassio/common.ts index b6f7decb25..6c1c254a1c 100644 --- a/src/data/hassio/common.ts +++ b/src/data/hassio/common.ts @@ -3,7 +3,8 @@ import { HomeAssistant } from "../../types"; export interface HassioResponse { data: T; - result: "ok"; + message?: string; + result: "ok" | "error"; } export interface HassioStats {