From a66b3f6b80c0eca20084a6c9b56af5b3643ea556 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Thu, 4 Mar 2021 10:29:00 +0100 Subject: [PATCH] Fix managing custom addon repositories (#8536) --- hassio/src/addon-store/hassio-addon-store.ts | 1 - .../dialog-hassio-repositories.ts | 51 +++++++++++-------- .../repositories/show-dialog-repositories.ts | 1 - 3 files changed, 30 insertions(+), 23 deletions(-) diff --git a/hassio/src/addon-store/hassio-addon-store.ts b/hassio/src/addon-store/hassio-addon-store.ts index 7769c095ef..fd39aa5cb7 100644 --- a/hassio/src/addon-store/hassio-addon-store.ts +++ b/hassio/src/addon-store/hassio-addon-store.ts @@ -190,7 +190,6 @@ class HassioAddonStore extends LitElement { private async _manageRepositories() { showRepositoriesDialog(this, { supervisor: this.supervisor, - loadData: () => this._loadData(), }); } diff --git a/hassio/src/dialogs/repositories/dialog-hassio-repositories.ts b/hassio/src/dialogs/repositories/dialog-hassio-repositories.ts index 35ea16957a..ea869b78e6 100644 --- a/hassio/src/dialogs/repositories/dialog-hassio-repositories.ts +++ b/hassio/src/dialogs/repositories/dialog-hassio-repositories.ts @@ -17,6 +17,7 @@ import { TemplateResult, } from "lit-element"; import memoizeOne from "memoize-one"; +import { fireEvent } from "../../../../src/common/dom/fire_event"; import "../../../../src/components/ha-circular-progress"; import { createCloseHeading } from "../../../../src/components/ha-dialog"; import "../../../../src/components/ha-svg-icon"; @@ -37,13 +38,10 @@ class HassioRepositoriesDialog extends LitElement { @property({ attribute: false }) public supervisor!: Supervisor; - @property({ attribute: false }) private _repos: HassioAddonRepository[] = []; - - @property({ attribute: false }) - private _dialogParams?: HassioRepositoryDialogParams; - @query("#repository_input", true) private _optionInput?: PaperInputElement; + @internalProperty() private _repositories?: HassioAddonRepository[]; + @internalProperty() private _opened = false; @internalProperty() private _prosessing = false; @@ -53,9 +51,9 @@ class HassioRepositoriesDialog extends LitElement { public async showDialog( dialogParams: HassioRepositoryDialogParams ): Promise { - this._dialogParams = dialogParams; this.supervisor = dialogParams.supervisor; this._opened = true; + await this._loadData(); await this.updateComplete; } @@ -71,9 +69,11 @@ class HassioRepositoriesDialog extends LitElement { ); protected render(): TemplateResult { - const repositories = this._filteredRepositories( - this.supervisor.addon.repositories - ); + if (this._repositories === undefined) { + return html` + `; + } + const repositories = this._filteredRepositories(this._repositories); return html` { + try { + const addonsinfo = await fetchHassioAddonsInfo(this.hass); + + this._repositories = addonsinfo.repositories; + + fireEvent(this, "supervisor-collection-refresh", { collection: "addon" }); + } catch (err) { + this._error = extractApiErrorMessage(err); + } + } + private async _addRepository() { const input = this._optionInput; if (!input || !input.value) { return; } this._prosessing = true; - const repositories = this._filteredRepositories(this._repos); + const repositories = this._filteredRepositories(this._repositories!); const newRepositories = repositories.map((repo) => { return repo.source; }); @@ -195,11 +212,7 @@ class HassioRepositoriesDialog extends LitElement { await setSupervisorOption(this.hass, { addons_repositories: newRepositories, }); - - const addonsInfo = await fetchHassioAddonsInfo(this.hass); - this._repos = addonsInfo.repositories; - - await this._dialogParams!.loadData(); + await this._loadData(); input.value = ""; } catch (err) { @@ -210,7 +223,7 @@ class HassioRepositoriesDialog extends LitElement { private async _removeRepository(ev: Event) { const slug = (ev.currentTarget as any).slug; - const repositories = this._filteredRepositories(this._repos); + const repositories = this._filteredRepositories(this._repositories!); const repository = repositories.find((repo) => { return repo.slug === slug; }); @@ -229,11 +242,7 @@ class HassioRepositoriesDialog extends LitElement { await setSupervisorOption(this.hass, { addons_repositories: newRepositories, }); - - const addonsInfo = await fetchHassioAddonsInfo(this.hass); - this._repos = addonsInfo.repositories; - - await this._dialogParams!.loadData(); + await this._loadData(); } catch (err) { this._error = extractApiErrorMessage(err); } diff --git a/hassio/src/dialogs/repositories/show-dialog-repositories.ts b/hassio/src/dialogs/repositories/show-dialog-repositories.ts index 63b3611de8..ff3ef7516c 100644 --- a/hassio/src/dialogs/repositories/show-dialog-repositories.ts +++ b/hassio/src/dialogs/repositories/show-dialog-repositories.ts @@ -4,7 +4,6 @@ import "./dialog-hassio-repositories"; export interface HassioRepositoryDialogParams { supervisor: Supervisor; - loadData: () => Promise; } export const showRepositoriesDialog = (