diff --git a/src/panels/config/backup/components/ha-backup-config-data.ts b/src/panels/config/backup/components/ha-backup-config-data.ts
index 699421d4b6..8af0ab046c 100644
--- a/src/panels/config/backup/components/ha-backup-config-data.ts
+++ b/src/panels/config/backup/components/ha-backup-config-data.ts
@@ -30,6 +30,7 @@ export type FormData = {
database: boolean;
media: boolean;
share: boolean;
+ local_addons: boolean;
addons_mode: "all" | "custom" | "none";
addons: string[];
};
@@ -39,6 +40,7 @@ const INITIAL_FORM_DATA: FormData = {
database: false,
media: false,
share: false,
+ local_addons: false,
addons_mode: "all",
addons: [],
};
@@ -51,9 +53,6 @@ export type BackupConfigData = {
include_addons?: string[];
};
-const SELF_CREATED_ADDONS_FOLDER = "addons/local";
-const SELF_CREATED_ADDONS_NAME = "___LOCAL_ADDONS___";
-
@customElement("ha-backup-config-data")
class HaBackupConfigData extends LitElement {
@property({ attribute: false }) public hass!: HomeAssistant;
@@ -86,14 +85,11 @@ class HaBackupConfigData extends LitElement {
private async _fetchAddons() {
const { addons } = await fetchHassioAddonsInfo(this.hass);
- this._addons = [
- ...addons,
- {
- name: "Self created add-ons",
- slug: SELF_CREATED_ADDONS_NAME,
- iconPath: mdiFolder,
- },
- ];
+ this._addons = addons;
+ }
+
+ private _hasLocalAddons(addons: BackupAddonItem[]): boolean {
+ return addons.some((addon) => addon.slug === "local");
}
private _getData = memoizeOne(
@@ -104,21 +100,14 @@ class HaBackupConfigData extends LitElement {
const config = value;
- const hasLocalAddonFolder = config.include_folders?.includes(
- SELF_CREATED_ADDONS_FOLDER
- );
-
const addons = config.include_addons?.slice() ?? [];
- if (hasLocalAddonFolder && !value.include_all_addons) {
- addons.push(SELF_CREATED_ADDONS_NAME);
- }
-
return {
homeassistant: config.include_homeassistant || this.forceHomeAssistant,
database: config.include_database,
media: config.include_folders?.includes("media") || false,
share: config.include_folders?.includes("share") || false,
+ local_addons: config.include_folders?.includes("addons/local") || false,
addons_mode: config.include_all_addons
? "all"
: addons.length > 0 || showAddon
@@ -130,21 +119,13 @@ class HaBackupConfigData extends LitElement {
);
private _setData(data: FormData) {
- const hasSelfCreatedAddons = data.addons.includes(SELF_CREATED_ADDONS_NAME);
-
const include_folders = [
...(data.media ? ["media"] : []),
...(data.share ? ["share"] : []),
+ ...(data.local_addons ? ["addons/local"] : []),
];
- let include_addons = data.addons_mode === "custom" ? data.addons : [];
-
- if (hasSelfCreatedAddons || data.addons_mode === "all") {
- include_folders.push(SELF_CREATED_ADDONS_FOLDER);
- include_addons = include_addons.filter(
- (addon) => addon !== SELF_CREATED_ADDONS_NAME
- );
- }
+ const include_addons = data.addons_mode === "custom" ? data.addons : [];
this.value = {
include_homeassistant: data.homeassistant || this.forceHomeAssistant,
@@ -234,6 +215,26 @@ class HaBackupConfigData extends LitElement {
>
+ ${this._hasLocalAddons(this._addons)
+ ? html`
+
+
+ Local addons folder
+
+ Folder that contains the data of your local add-ons.
+
+
+
+ `
+ : nothing}
${this._addons.length
? html`
diff --git a/src/panels/config/backup/components/ha-backup-data-picker.ts b/src/panels/config/backup/components/ha-backup-data-picker.ts
index f2d27c7a81..9f98ca6267 100644
--- a/src/panels/config/backup/components/ha-backup-data-picker.ts
+++ b/src/panels/config/backup/components/ha-backup-data-picker.ts
@@ -31,9 +31,6 @@ type CheckBoxItem = {
version?: string;
};
-const SELF_CREATED_ADDONS_FOLDER = "addons/local";
-const SELF_CREATED_ADDONS_NAME = "___LOCAL_ADDONS___";
-
const ITEM_ICONS = {
config: mdiCog,
database: mdiChartBox,
@@ -91,13 +88,9 @@ export class HaBackupDataPicker extends LitElement {
id: "database",
});
}
- // Filter out the local add-ons folder
- const folders = data.folders.filter(
- (folder) => folder !== SELF_CREATED_ADDONS_FOLDER
- );
items.push(
- ...folders.map((folder) => ({
- label: capitalizeFirstLetter(folder),
+ ...data.folders.map((folder) => ({
+ label: this._localizeFolder(folder),
id: folder,
}))
);
@@ -105,30 +98,25 @@ export class HaBackupDataPicker extends LitElement {
}
);
+ private _localizeFolder(folder: string): string {
+ if (folder === "addons/local") {
+ return "Local addons";
+ }
+ return capitalizeFirstLetter(folder);
+ }
+
private _addonsItems = memoizeOne(
(
data: BackupData,
_localize: LocalizeFunc,
addonIcons: Record
- ) => {
- const items = data.addons.map((addon) => ({
+ ) =>
+ data.addons.map((addon) => ({
name: addon.name,
slug: addon.slug,
version: addon.version,
icon: addonIcons[addon.slug],
- }));
-
- // Add local add-ons folder in addons items
- if (data.folders.includes(SELF_CREATED_ADDONS_FOLDER)) {
- items.push({
- name: "Self created add-ons",
- slug: SELF_CREATED_ADDONS_NAME,
- iconPath: mdiFolder,
- });
- }
-
- return items;
- }
+ }))
);
private _parseValue = memoizeOne((value?: BackupData): SelectedItems => {
@@ -148,13 +136,9 @@ export class HaBackupDataPicker extends LitElement {
homeassistant.push("database");
}
- let folders = [...value.folders];
- const addonsList = value.addons.map((addon) => addon.slug);
- if (folders.includes(SELF_CREATED_ADDONS_FOLDER)) {
- folders = folders.filter((f) => f !== SELF_CREATED_ADDONS_FOLDER);
- addonsList.push(SELF_CREATED_ADDONS_NAME);
- }
+ const folders = value.folders;
homeassistant.push(...folders);
+ const addonsList = value.addons.map((addon) => addon.slug);
addons.push(...addonsList);
return {
@@ -171,11 +155,8 @@ export class HaBackupDataPicker extends LitElement {
addons: data.addons.filter((addon) =>
selectedItems.addons.includes(addon.slug)
),
- folders: data.folders.filter(
- (folder) =>
- selectedItems.homeassistant.includes(folder) ||
- (selectedItems.addons.includes(folder) &&
- folder === SELF_CREATED_ADDONS_FOLDER)
+ folders: data.folders.filter((folder) =>
+ selectedItems.homeassistant.includes(folder)
),
})
);