diff --git a/hassio/src/dialogs/repositories/dialog-hassio-repositories.ts b/hassio/src/dialogs/repositories/dialog-hassio-repositories.ts index 03f1fc0395..b9707f5986 100644 --- a/hassio/src/dialogs/repositories/dialog-hassio-repositories.ts +++ b/hassio/src/dialogs/repositories/dialog-hassio-repositories.ts @@ -1,5 +1,6 @@ +import "@polymer/paper-tooltip/paper-tooltip"; import "@material/mwc-button/mwc-button"; -import { mdiDelete } from "@mdi/js"; +import { mdiDelete, mdiDeleteOff } from "@mdi/js"; import "@polymer/paper-input/paper-input"; import type { PaperInputElement } from "@polymer/paper-input/paper-input"; import "@polymer/paper-item/paper-item"; @@ -15,6 +16,7 @@ import { createCloseHeading } from "../../../../src/components/ha-dialog"; import "../../../../src/components/ha-icon-button"; import { fetchHassioAddonsInfo, + HassioAddonInfo, HassioAddonRepository, } from "../../../../src/data/hassio/addon"; import { extractApiErrorMessage } from "../../../../src/data/hassio/common"; @@ -60,11 +62,24 @@ class HassioRepositoriesDialog extends LitElement { .sort((a, b) => caseInsensitiveStringCompare(a.name, b.name)) ); + private _filteredUsedRepositories = memoizeOne( + (repos: HassioAddonRepository[], addons: HassioAddonInfo[]) => + repos + .filter((repo) => + addons.some((addon) => addon.repository === repo.slug) + ) + .map((repo) => repo.slug) + ); + protected render(): TemplateResult { if (!this._dialogParams?.supervisor || this._repositories === undefined) { return html``; } const repositories = this._filteredRepositories(this._repositories); + const usedRepositories = this._filteredUsedRepositories( + repositories, + this._dialogParams.supervisor.supervisor.addons + ); return html` ${repo.maintainer}
${repo.url}
- +
+ + + + ${this._dialogParams!.supervisor.localize( + usedRepositories.includes(repo.slug) + ? "dialog.repositories.used" + : "dialog.repositories.remove" + )} + +
` ) - : html` No repositories `} + : html` No repositories `}