diff --git a/hassio/src/addon-store/hassio-addon-store.ts b/hassio/src/addon-store/hassio-addon-store.ts index fd39aa5cb7..5ca3d77d73 100644 --- a/hassio/src/addon-store/hassio-addon-store.ts +++ b/hassio/src/addon-store/hassio-addon-store.ts @@ -14,7 +14,9 @@ import { html, TemplateResult } from "lit-html"; import memoizeOne from "memoize-one"; import { atLeastVersion } from "../../../src/common/config/version"; import { fireEvent } from "../../../src/common/dom/fire_event"; +import { navigate } from "../../../src/common/navigate"; import "../../../src/common/search/search-input"; +import { extractSearchParam } from "../../../src/common/url/search-params"; import "../../../src/components/ha-button-menu"; import "../../../src/components/ha-svg-icon"; import { @@ -137,6 +139,12 @@ class HassioAddonStore extends LitElement { protected firstUpdated(changedProps: PropertyValues) { super.firstUpdated(changedProps); + const repositoryUrl = extractSearchParam("repository_url"); + navigate(this, "/hassio/store", true); + if (repositoryUrl) { + this._manageRepositories(repositoryUrl); + } + this.addEventListener("hass-api-called", (ev) => this.apiCalled(ev)); this._loadData(); } @@ -170,7 +178,7 @@ class HassioAddonStore extends LitElement { private _handleAction(ev: CustomEvent) { switch (ev.detail.index) { case 0: - this._manageRepositories(); + this._manageRepositoriesClicked(); break; case 1: this.refreshData(); @@ -187,9 +195,14 @@ class HassioAddonStore extends LitElement { } } - private async _manageRepositories() { + private _manageRepositoriesClicked() { + this._manageRepositories(); + } + + private async _manageRepositories(url?: string) { showRepositoriesDialog(this, { supervisor: this.supervisor, + url, }); } diff --git a/hassio/src/dialogs/repositories/dialog-hassio-repositories.ts b/hassio/src/dialogs/repositories/dialog-hassio-repositories.ts index ea869b78e6..2c02b817f6 100644 --- a/hassio/src/dialogs/repositories/dialog-hassio-repositories.ts +++ b/hassio/src/dialogs/repositories/dialog-hassio-repositories.ts @@ -27,7 +27,6 @@ import { } 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 { haStyle, haStyleDialog } from "../../../../src/resources/styles"; import type { HomeAssistant } from "../../../../src/types"; import { HassioRepositoryDialogParams } from "./show-dialog-repositories"; @@ -36,12 +35,12 @@ import { HassioRepositoryDialogParams } from "./show-dialog-repositories"; class HassioRepositoriesDialog extends LitElement { @property({ attribute: false }) public hass!: HomeAssistant; - @property({ attribute: false }) public supervisor!: Supervisor; - @query("#repository_input", true) private _optionInput?: PaperInputElement; @internalProperty() private _repositories?: HassioAddonRepository[]; + @internalProperty() private _dialogParams?: HassioRepositoryDialogParams; + @internalProperty() private _opened = false; @internalProperty() private _prosessing = false; @@ -51,13 +50,14 @@ class HassioRepositoriesDialog extends LitElement { public async showDialog( dialogParams: HassioRepositoryDialogParams ): Promise { - this.supervisor = dialogParams.supervisor; + this._dialogParams = dialogParams; this._opened = true; await this._loadData(); await this.updateComplete; } public closeDialog(): void { + this._dialogParams = undefined; this._opened = false; this._error = ""; } @@ -69,9 +69,8 @@ class HassioRepositoriesDialog extends LitElement { ); protected render(): TemplateResult { - if (this._repositories === undefined) { - return html` - `; + if (!this._dialogParams?.supervisor || this._repositories === undefined) { + return html``; } const repositories = this._filteredRepositories(this._repositories); return html` @@ -82,7 +81,7 @@ class HassioRepositoriesDialog extends LitElement { escapeKeyAction .heading=${createCloseHeading( this.hass, - this.supervisor.localize("dialog.repositories.title") + this._dialogParams!.supervisor.localize("dialog.repositories.title") )} > ${this._error ? html`
${this._error}
` : ""} @@ -98,7 +97,7 @@ class HassioRepositoriesDialog extends LitElement { ${this._prosessing ? html`` - : this.supervisor.localize("dialog.repositories.add")} + : this._dialogParams!.supervisor.localize( + "dialog.repositories.add" + )} - - Close + + ${this._dialogParams?.supervisor.localize("common.close")} `; diff --git a/hassio/src/dialogs/repositories/show-dialog-repositories.ts b/hassio/src/dialogs/repositories/show-dialog-repositories.ts index ff3ef7516c..50b0a4f578 100644 --- a/hassio/src/dialogs/repositories/show-dialog-repositories.ts +++ b/hassio/src/dialogs/repositories/show-dialog-repositories.ts @@ -4,6 +4,7 @@ import "./dialog-hassio-repositories"; export interface HassioRepositoryDialogParams { supervisor: Supervisor; + url?: string; } export const showRepositoriesDialog = ( diff --git a/hassio/src/hassio-my-redirect.ts b/hassio/src/hassio-my-redirect.ts index 33992391a0..ff9a40b399 100644 --- a/hassio/src/hassio-my-redirect.ts +++ b/hassio/src/hassio-my-redirect.ts @@ -22,6 +22,9 @@ import { HomeAssistant, Route } from "../../src/types"; import { Supervisor } from "../../src/data/supervisor/supervisor"; const REDIRECTS: Redirects = { + supervisor: { + redirect: "/hassio/dashboard", + }, supervisor_logs: { redirect: "/hassio/system", }, @@ -34,15 +37,18 @@ const REDIRECTS: Redirects = { supervisor_store: { redirect: "/hassio/store", }, - supervisor: { - redirect: "/hassio/dashboard", - }, supervisor_addon: { redirect: "/hassio/addon", params: { addon: "string", }, }, + supervisor_add_addon_repository: { + redirect: "/hassio/store", + params: { + repository_url: "url", + }, + }, }; @customElement("hassio-my-redirect") diff --git a/src/translations/en.json b/src/translations/en.json index 0c7a54aa4d..2b887a7f25 100755 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -3609,7 +3609,8 @@ "restart_name": "Restart {name}", "restart": "Restart", "running_version": "You are currently running version {version}", - "save": "Save", + "save": "[%key:ui::common::save%]", + "close": "[%key:ui::common::close%]", "show_more": "Show more information about this", "update_available": "{count, plural,\n one {Update}\n other {{count} Updates}\n} pending", "update": "Update",