mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-25 18:26:35 +00:00
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,
|
HassioAddonDetails,
|
||||||
} from "../../../src/data/hassio/addon";
|
} from "../../../src/data/hassio/addon";
|
||||||
import { extractApiErrorMessage } from "../../../src/data/hassio/common";
|
import { extractApiErrorMessage } from "../../../src/data/hassio/common";
|
||||||
|
import { setSupervisorOption } from "../../../src/data/hassio/supervisor";
|
||||||
import { Supervisor } from "../../../src/data/supervisor/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-error-screen";
|
||||||
import "../../../src/layouts/hass-loading-screen";
|
import "../../../src/layouts/hass-loading-screen";
|
||||||
import "../../../src/layouts/hass-tabs-subpage";
|
import "../../../src/layouts/hass-tabs-subpage";
|
||||||
@ -166,6 +168,42 @@ class HassioAddonDashboard extends LitElement {
|
|||||||
protected async firstUpdated(): Promise<void> {
|
protected async firstUpdated(): Promise<void> {
|
||||||
if (this.route.path === "") {
|
if (this.route.path === "") {
|
||||||
const requestedAddon = extractSearchParam("addon");
|
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) {
|
if (requestedAddon) {
|
||||||
const addonsInfo = await fetchHassioAddonsInfo(this.hass);
|
const addonsInfo = await fetchHassioAddonsInfo(this.hass);
|
||||||
const validAddon = addonsInfo.addons.some(
|
const validAddon = addonsInfo.addons.some(
|
||||||
|
@ -42,6 +42,9 @@ export const REDIRECTS: Redirects = {
|
|||||||
params: {
|
params: {
|
||||||
addon: "string",
|
addon: "string",
|
||||||
},
|
},
|
||||||
|
optional_params: {
|
||||||
|
repository_url: "url",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
supervisor_ingress: {
|
supervisor_ingress: {
|
||||||
redirect: "/hassio/ingress",
|
redirect: "/hassio/ingress",
|
||||||
@ -124,6 +127,14 @@ class HassioMyRedirect extends LitElement {
|
|||||||
}
|
}
|
||||||
resultParams[key] = params[key];
|
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)}`;
|
return `?${createSearchParam(resultParams)}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { atLeastVersion } from "../../common/config/version";
|
import { atLeastVersion } from "../../common/config/version";
|
||||||
import { HomeAssistant, PanelInfo } from "../../types";
|
import { HomeAssistant, PanelInfo } from "../../types";
|
||||||
import { SupervisorArch } from "../supervisor/supervisor";
|
import { SupervisorArch } from "../supervisor/supervisor";
|
||||||
import { HassioAddonInfo, HassioAddonRepository } from "./addon";
|
import { HassioAddonInfo } from "./addon";
|
||||||
import { hassioApiResultExtractor, HassioResponse } from "./common";
|
import { hassioApiResultExtractor, HassioResponse } from "./common";
|
||||||
|
|
||||||
export type HassioHomeAssistantInfo = {
|
export type HassioHomeAssistantInfo = {
|
||||||
@ -23,7 +23,7 @@ export type HassioHomeAssistantInfo = {
|
|||||||
|
|
||||||
export type HassioSupervisorInfo = {
|
export type HassioSupervisorInfo = {
|
||||||
addons: HassioAddonInfo[];
|
addons: HassioAddonInfo[];
|
||||||
addons_repositories: HassioAddonRepository[];
|
addons_repositories: string[];
|
||||||
arch: SupervisorArch;
|
arch: SupervisorArch;
|
||||||
channel: string;
|
channel: string;
|
||||||
debug: boolean;
|
debug: boolean;
|
||||||
|
@ -220,6 +220,9 @@ export interface Redirect {
|
|||||||
params?: {
|
params?: {
|
||||||
[key: string]: ParamType;
|
[key: string]: ParamType;
|
||||||
};
|
};
|
||||||
|
optional_params?: {
|
||||||
|
[key: string]: ParamType;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@customElement("ha-panel-my")
|
@customElement("ha-panel-my")
|
||||||
|
@ -4480,6 +4480,7 @@
|
|||||||
"cancel": "[%key:ui::common::cancel%]",
|
"cancel": "[%key:ui::common::cancel%]",
|
||||||
"yes": "[%key:ui::common::yes%]",
|
"yes": "[%key:ui::common::yes%]",
|
||||||
"no": "[%key:ui::common::no%]",
|
"no": "[%key:ui::common::no%]",
|
||||||
|
"add": "[%key:supervisor::dialog::repositories::add%]",
|
||||||
"description": "Description",
|
"description": "Description",
|
||||||
"failed_to_restart_name": "Failed to restart {name}",
|
"failed_to_restart_name": "Failed to restart {name}",
|
||||||
"failed_to_update_name": "Failed to update {name}",
|
"failed_to_update_name": "Failed to update {name}",
|
||||||
@ -4549,8 +4550,11 @@
|
|||||||
"my": {
|
"my": {
|
||||||
"not_supported": "[%key:ui::panel::my::not_supported%]",
|
"not_supported": "[%key:ui::panel::my::not_supported%]",
|
||||||
"faq_link": "[%key:ui::panel::my::faq_link%]",
|
"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": "[%key:ui::panel::my::error%]",
|
||||||
"error_addon_not_found": "Add-on not found",
|
"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_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_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"
|
"error_addon_no_ingress": "The requested add-on does not support ingress"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user