Add optional repository_url to supervisor_addon my link (#12524)
This commit is contained in:
parent
a4a0d7cf19
commit
f5864181af
|
@ -17,7 +17,9 @@ import {
|
|||
HassioAddonDetails,
|
||||
} from "../../../src/data/hassio/addon";
|
||||
import { extractApiErrorMessage } from "../../../src/data/hassio/common";
|
||||
import { setSupervisorOption } from "../../../src/data/hassio/supervisor";
|
||||
import { Supervisor } from "../../../src/data/supervisor/supervisor";
|
||||
import { showConfirmationDialog } from "../../../src/dialogs/generic/show-dialog-box";
|
||||
import "../../../src/layouts/hass-error-screen";
|
||||
import "../../../src/layouts/hass-loading-screen";
|
||||
import "../../../src/layouts/hass-tabs-subpage";
|
||||
|
@ -166,6 +168,42 @@ class HassioAddonDashboard extends LitElement {
|
|||
protected async firstUpdated(): Promise<void> {
|
||||
if (this.route.path === "") {
|
||||
const requestedAddon = extractSearchParam("addon");
|
||||
const requestedAddonRepository = extractSearchParam("repository_url");
|
||||
if (
|
||||
requestedAddonRepository &&
|
||||
!this.supervisor.supervisor.addons_repositories.find(
|
||||
(repo) => repo === requestedAddonRepository
|
||||
)
|
||||
) {
|
||||
if (
|
||||
!(await showConfirmationDialog(this, {
|
||||
title: this.supervisor.localize("my.add_addon_repository_title"),
|
||||
text: this.supervisor.localize(
|
||||
"my.add_addon_repository_description",
|
||||
{ addon: requestedAddon, repository: requestedAddonRepository }
|
||||
),
|
||||
confirmText: this.supervisor.localize("common.add"),
|
||||
dismissText: this.supervisor.localize("common.cancel"),
|
||||
}))
|
||||
) {
|
||||
this._error = this.supervisor.localize(
|
||||
"my.error_repository_not_found"
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await setSupervisorOption(this.hass, {
|
||||
addons_repositories: [
|
||||
...this.supervisor.supervisor.addons_repositories,
|
||||
requestedAddonRepository,
|
||||
],
|
||||
});
|
||||
} catch (err: any) {
|
||||
this._error = extractApiErrorMessage(err);
|
||||
}
|
||||
}
|
||||
|
||||
if (requestedAddon) {
|
||||
const addonsInfo = await fetchHassioAddonsInfo(this.hass);
|
||||
const validAddon = addonsInfo.addons.some(
|
||||
|
|
|
@ -42,6 +42,9 @@ export const REDIRECTS: Redirects = {
|
|||
params: {
|
||||
addon: "string",
|
||||
},
|
||||
optional_params: {
|
||||
repository_url: "url",
|
||||
},
|
||||
},
|
||||
supervisor_ingress: {
|
||||
redirect: "/hassio/ingress",
|
||||
|
@ -124,6 +127,14 @@ class HassioMyRedirect extends LitElement {
|
|||
}
|
||||
resultParams[key] = params[key];
|
||||
});
|
||||
Object.entries(redirect.optional_params || {}).forEach(([key, type]) => {
|
||||
if (params[key]) {
|
||||
if (!this._checkParamType(type, params[key])) {
|
||||
throw Error();
|
||||
}
|
||||
resultParams[key] = params[key];
|
||||
}
|
||||
});
|
||||
return `?${createSearchParam(resultParams)}`;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import { atLeastVersion } from "../../common/config/version";
|
||||
import { HomeAssistant, PanelInfo } from "../../types";
|
||||
import { SupervisorArch } from "../supervisor/supervisor";
|
||||
import { HassioAddonInfo, HassioAddonRepository } from "./addon";
|
||||
import { HassioAddonInfo } from "./addon";
|
||||
import { hassioApiResultExtractor, HassioResponse } from "./common";
|
||||
|
||||
export type HassioHomeAssistantInfo = {
|
||||
|
@ -23,7 +23,7 @@ export type HassioHomeAssistantInfo = {
|
|||
|
||||
export type HassioSupervisorInfo = {
|
||||
addons: HassioAddonInfo[];
|
||||
addons_repositories: HassioAddonRepository[];
|
||||
addons_repositories: string[];
|
||||
arch: SupervisorArch;
|
||||
channel: string;
|
||||
debug: boolean;
|
||||
|
|
|
@ -220,6 +220,9 @@ export interface Redirect {
|
|||
params?: {
|
||||
[key: string]: ParamType;
|
||||
};
|
||||
optional_params?: {
|
||||
[key: string]: ParamType;
|
||||
};
|
||||
}
|
||||
|
||||
@customElement("ha-panel-my")
|
||||
|
|
|
@ -4480,6 +4480,7 @@
|
|||
"cancel": "[%key:ui::common::cancel%]",
|
||||
"yes": "[%key:ui::common::yes%]",
|
||||
"no": "[%key:ui::common::no%]",
|
||||
"add": "[%key:supervisor::dialog::repositories::add%]",
|
||||
"description": "Description",
|
||||
"failed_to_restart_name": "Failed to restart {name}",
|
||||
"failed_to_update_name": "Failed to update {name}",
|
||||
|
@ -4549,8 +4550,11 @@
|
|||
"my": {
|
||||
"not_supported": "[%key:ui::panel::my::not_supported%]",
|
||||
"faq_link": "[%key:ui::panel::my::faq_link%]",
|
||||
"add_addon_repository_title": "Missing add-on repository",
|
||||
"add_addon_repository_description": "The addon ''{addon}'' is a part of the add-on repository ''{repository}'', this repository is missing on your system, do you want to add that now?",
|
||||
"error": "[%key:ui::panel::my::error%]",
|
||||
"error_addon_not_found": "Add-on not found",
|
||||
"error_repository_not_found": "The required repository for this Add-on was not found",
|
||||
"error_addon_not_started": "The requested add-on is not running. Please start it first",
|
||||
"error_addon_not_installed": "The requested add-on is not installed. Please install it first",
|
||||
"error_addon_no_ingress": "The requested add-on does not support ingress"
|
||||
|
|
Loading…
Reference in New Issue