mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-25 18:26:35 +00:00
Fix managing custom addon repositories (#8536)
This commit is contained in:
parent
c97ec32343
commit
a66b3f6b80
@ -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(),
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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 = (
|
||||||
|
Loading…
x
Reference in New Issue
Block a user