Fix managing custom addon repositories (#8536)

This commit is contained in:
Joakim Sørensen 2021-03-04 10:29:00 +01:00 committed by GitHub
parent c97ec32343
commit a66b3f6b80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 23 deletions

View File

@ -190,7 +190,6 @@ class HassioAddonStore extends LitElement {
private async _manageRepositories() { private async _manageRepositories() {
showRepositoriesDialog(this, { showRepositoriesDialog(this, {
supervisor: this.supervisor, supervisor: this.supervisor,
loadData: () => this._loadData(),
}); });
} }

View File

@ -17,6 +17,7 @@ import {
TemplateResult, TemplateResult,
} from "lit-element"; } from "lit-element";
import memoizeOne from "memoize-one"; import memoizeOne from "memoize-one";
import { fireEvent } from "../../../../src/common/dom/fire_event";
import "../../../../src/components/ha-circular-progress"; import "../../../../src/components/ha-circular-progress";
import { createCloseHeading } from "../../../../src/components/ha-dialog"; import { createCloseHeading } from "../../../../src/components/ha-dialog";
import "../../../../src/components/ha-svg-icon"; import "../../../../src/components/ha-svg-icon";
@ -37,13 +38,10 @@ class HassioRepositoriesDialog extends LitElement {
@property({ attribute: false }) public supervisor!: Supervisor; @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; @query("#repository_input", true) private _optionInput?: PaperInputElement;
@internalProperty() private _repositories?: HassioAddonRepository[];
@internalProperty() private _opened = false; @internalProperty() private _opened = false;
@internalProperty() private _prosessing = false; @internalProperty() private _prosessing = false;
@ -53,9 +51,9 @@ class HassioRepositoriesDialog extends LitElement {
public async showDialog( public async showDialog(
dialogParams: HassioRepositoryDialogParams dialogParams: HassioRepositoryDialogParams
): Promise<void> { ): Promise<void> {
this._dialogParams = dialogParams;
this.supervisor = dialogParams.supervisor; this.supervisor = dialogParams.supervisor;
this._opened = true; this._opened = true;
await this._loadData();
await this.updateComplete; await this.updateComplete;
} }
@ -71,9 +69,11 @@ class HassioRepositoriesDialog extends LitElement {
); );
protected render(): TemplateResult { protected render(): TemplateResult {
const repositories = this._filteredRepositories( if (this._repositories === undefined) {
this.supervisor.addon.repositories return html`<ha-circular-progress alt="loading" size="large" active>
); </ha-circular-progress>`;
}
const repositories = this._filteredRepositories(this._repositories);
return html` return html`
<ha-dialog <ha-dialog
.open=${this._opened} .open=${this._opened}
@ -159,6 +159,11 @@ class HassioRepositoriesDialog extends LitElement {
ha-paper-dropdown-menu { ha-paper-dropdown-menu {
display: block; display: block;
} }
ha-circular-progress {
display: block;
margin: 32px;
text-align: center;
}
`, `,
]; ];
} }
@ -179,13 +184,25 @@ class HassioRepositoriesDialog extends LitElement {
this._addRepository(); this._addRepository();
} }
private async _loadData(): Promise<void> {
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() { private async _addRepository() {
const input = this._optionInput; const input = this._optionInput;
if (!input || !input.value) { if (!input || !input.value) {
return; return;
} }
this._prosessing = true; this._prosessing = true;
const repositories = this._filteredRepositories(this._repos); const repositories = this._filteredRepositories(this._repositories!);
const newRepositories = repositories.map((repo) => { const newRepositories = repositories.map((repo) => {
return repo.source; return repo.source;
}); });
@ -195,11 +212,7 @@ class HassioRepositoriesDialog extends LitElement {
await setSupervisorOption(this.hass, { await setSupervisorOption(this.hass, {
addons_repositories: newRepositories, addons_repositories: newRepositories,
}); });
await this._loadData();
const addonsInfo = await fetchHassioAddonsInfo(this.hass);
this._repos = addonsInfo.repositories;
await this._dialogParams!.loadData();
input.value = ""; input.value = "";
} catch (err) { } catch (err) {
@ -210,7 +223,7 @@ class HassioRepositoriesDialog extends LitElement {
private async _removeRepository(ev: Event) { private async _removeRepository(ev: Event) {
const slug = (ev.currentTarget as any).slug; const slug = (ev.currentTarget as any).slug;
const repositories = this._filteredRepositories(this._repos); const repositories = this._filteredRepositories(this._repositories!);
const repository = repositories.find((repo) => { const repository = repositories.find((repo) => {
return repo.slug === slug; return repo.slug === slug;
}); });
@ -229,11 +242,7 @@ class HassioRepositoriesDialog extends LitElement {
await setSupervisorOption(this.hass, { await setSupervisorOption(this.hass, {
addons_repositories: newRepositories, addons_repositories: newRepositories,
}); });
await this._loadData();
const addonsInfo = await fetchHassioAddonsInfo(this.hass);
this._repos = addonsInfo.repositories;
await this._dialogParams!.loadData();
} catch (err) { } catch (err) {
this._error = extractApiErrorMessage(err); this._error = extractApiErrorMessage(err);
} }

View File

@ -4,7 +4,6 @@ import "./dialog-hassio-repositories";
export interface HassioRepositoryDialogParams { export interface HassioRepositoryDialogParams {
supervisor: Supervisor; supervisor: Supervisor;
loadData: () => Promise<void>;
} }
export const showRepositoriesDialog = ( export const showRepositoriesDialog = (