From 7d5b5663123bb16d1da0c5bac3f2fc26d5f69ae8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joakim=20S=C3=B8rensen?= Date: Sat, 18 Dec 2021 07:21:46 +0100 Subject: [PATCH] Disable repository removal if used for installed add-ons (#10922) --- .../dialog-hassio-repositories.ts | 52 +++++++++++++++---- src/translations/en.json | 3 +- 2 files changed, 44 insertions(+), 11 deletions(-) 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 `}