mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-10 19:06:36 +00:00
Only show local addons folder settings if at least one addon is local (#23333)
Only show local addons folder settings if an addon is local
This commit is contained in:
parent
c022871ead
commit
3da13b823a
@ -30,6 +30,7 @@ export type FormData = {
|
|||||||
database: boolean;
|
database: boolean;
|
||||||
media: boolean;
|
media: boolean;
|
||||||
share: boolean;
|
share: boolean;
|
||||||
|
local_addons: boolean;
|
||||||
addons_mode: "all" | "custom" | "none";
|
addons_mode: "all" | "custom" | "none";
|
||||||
addons: string[];
|
addons: string[];
|
||||||
};
|
};
|
||||||
@ -39,6 +40,7 @@ const INITIAL_FORM_DATA: FormData = {
|
|||||||
database: false,
|
database: false,
|
||||||
media: false,
|
media: false,
|
||||||
share: false,
|
share: false,
|
||||||
|
local_addons: false,
|
||||||
addons_mode: "all",
|
addons_mode: "all",
|
||||||
addons: [],
|
addons: [],
|
||||||
};
|
};
|
||||||
@ -51,9 +53,6 @@ export type BackupConfigData = {
|
|||||||
include_addons?: string[];
|
include_addons?: string[];
|
||||||
};
|
};
|
||||||
|
|
||||||
const SELF_CREATED_ADDONS_FOLDER = "addons/local";
|
|
||||||
const SELF_CREATED_ADDONS_NAME = "___LOCAL_ADDONS___";
|
|
||||||
|
|
||||||
@customElement("ha-backup-config-data")
|
@customElement("ha-backup-config-data")
|
||||||
class HaBackupConfigData extends LitElement {
|
class HaBackupConfigData extends LitElement {
|
||||||
@property({ attribute: false }) public hass!: HomeAssistant;
|
@property({ attribute: false }) public hass!: HomeAssistant;
|
||||||
@ -86,14 +85,11 @@ class HaBackupConfigData extends LitElement {
|
|||||||
|
|
||||||
private async _fetchAddons() {
|
private async _fetchAddons() {
|
||||||
const { addons } = await fetchHassioAddonsInfo(this.hass);
|
const { addons } = await fetchHassioAddonsInfo(this.hass);
|
||||||
this._addons = [
|
this._addons = addons;
|
||||||
...addons,
|
}
|
||||||
{
|
|
||||||
name: "Self created add-ons",
|
private _hasLocalAddons(addons: BackupAddonItem[]): boolean {
|
||||||
slug: SELF_CREATED_ADDONS_NAME,
|
return addons.some((addon) => addon.slug === "local");
|
||||||
iconPath: mdiFolder,
|
|
||||||
},
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private _getData = memoizeOne(
|
private _getData = memoizeOne(
|
||||||
@ -104,21 +100,14 @@ class HaBackupConfigData extends LitElement {
|
|||||||
|
|
||||||
const config = value;
|
const config = value;
|
||||||
|
|
||||||
const hasLocalAddonFolder = config.include_folders?.includes(
|
|
||||||
SELF_CREATED_ADDONS_FOLDER
|
|
||||||
);
|
|
||||||
|
|
||||||
const addons = config.include_addons?.slice() ?? [];
|
const addons = config.include_addons?.slice() ?? [];
|
||||||
|
|
||||||
if (hasLocalAddonFolder && !value.include_all_addons) {
|
|
||||||
addons.push(SELF_CREATED_ADDONS_NAME);
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
homeassistant: config.include_homeassistant || this.forceHomeAssistant,
|
homeassistant: config.include_homeassistant || this.forceHomeAssistant,
|
||||||
database: config.include_database,
|
database: config.include_database,
|
||||||
media: config.include_folders?.includes("media") || false,
|
media: config.include_folders?.includes("media") || false,
|
||||||
share: config.include_folders?.includes("share") || false,
|
share: config.include_folders?.includes("share") || false,
|
||||||
|
local_addons: config.include_folders?.includes("addons/local") || false,
|
||||||
addons_mode: config.include_all_addons
|
addons_mode: config.include_all_addons
|
||||||
? "all"
|
? "all"
|
||||||
: addons.length > 0 || showAddon
|
: addons.length > 0 || showAddon
|
||||||
@ -130,21 +119,13 @@ class HaBackupConfigData extends LitElement {
|
|||||||
);
|
);
|
||||||
|
|
||||||
private _setData(data: FormData) {
|
private _setData(data: FormData) {
|
||||||
const hasSelfCreatedAddons = data.addons.includes(SELF_CREATED_ADDONS_NAME);
|
|
||||||
|
|
||||||
const include_folders = [
|
const include_folders = [
|
||||||
...(data.media ? ["media"] : []),
|
...(data.media ? ["media"] : []),
|
||||||
...(data.share ? ["share"] : []),
|
...(data.share ? ["share"] : []),
|
||||||
|
...(data.local_addons ? ["addons/local"] : []),
|
||||||
];
|
];
|
||||||
|
|
||||||
let include_addons = data.addons_mode === "custom" ? data.addons : [];
|
const 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
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.value = {
|
this.value = {
|
||||||
include_homeassistant: data.homeassistant || this.forceHomeAssistant,
|
include_homeassistant: data.homeassistant || this.forceHomeAssistant,
|
||||||
@ -234,6 +215,26 @@ class HaBackupConfigData extends LitElement {
|
|||||||
></ha-switch>
|
></ha-switch>
|
||||||
</ha-md-list-item>
|
</ha-md-list-item>
|
||||||
|
|
||||||
|
${this._hasLocalAddons(this._addons)
|
||||||
|
? html`
|
||||||
|
<ha-md-list-item>
|
||||||
|
<ha-svg-icon
|
||||||
|
slot="start"
|
||||||
|
.path=${mdiFolder}
|
||||||
|
></ha-svg-icon>
|
||||||
|
<span slot="headline">Local addons folder</span>
|
||||||
|
<span slot="supporting-text">
|
||||||
|
Folder that contains the data of your local add-ons.
|
||||||
|
</span>
|
||||||
|
<ha-switch
|
||||||
|
id="local_addons"
|
||||||
|
slot="end"
|
||||||
|
@change=${this._switchChanged}
|
||||||
|
.checked=${data.local_addons}
|
||||||
|
></ha-switch>
|
||||||
|
</ha-md-list-item>
|
||||||
|
`
|
||||||
|
: nothing}
|
||||||
${this._addons.length
|
${this._addons.length
|
||||||
? html`
|
? html`
|
||||||
<ha-md-list-item>
|
<ha-md-list-item>
|
||||||
|
@ -31,9 +31,6 @@ type CheckBoxItem = {
|
|||||||
version?: string;
|
version?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
const SELF_CREATED_ADDONS_FOLDER = "addons/local";
|
|
||||||
const SELF_CREATED_ADDONS_NAME = "___LOCAL_ADDONS___";
|
|
||||||
|
|
||||||
const ITEM_ICONS = {
|
const ITEM_ICONS = {
|
||||||
config: mdiCog,
|
config: mdiCog,
|
||||||
database: mdiChartBox,
|
database: mdiChartBox,
|
||||||
@ -91,13 +88,9 @@ export class HaBackupDataPicker extends LitElement {
|
|||||||
id: "database",
|
id: "database",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
// Filter out the local add-ons folder
|
|
||||||
const folders = data.folders.filter(
|
|
||||||
(folder) => folder !== SELF_CREATED_ADDONS_FOLDER
|
|
||||||
);
|
|
||||||
items.push(
|
items.push(
|
||||||
...folders.map<CheckBoxItem>((folder) => ({
|
...data.folders.map<CheckBoxItem>((folder) => ({
|
||||||
label: capitalizeFirstLetter(folder),
|
label: this._localizeFolder(folder),
|
||||||
id: 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(
|
private _addonsItems = memoizeOne(
|
||||||
(
|
(
|
||||||
data: BackupData,
|
data: BackupData,
|
||||||
_localize: LocalizeFunc,
|
_localize: LocalizeFunc,
|
||||||
addonIcons: Record<string, boolean>
|
addonIcons: Record<string, boolean>
|
||||||
) => {
|
) =>
|
||||||
const items = data.addons.map<BackupAddonItem>((addon) => ({
|
data.addons.map<BackupAddonItem>((addon) => ({
|
||||||
name: addon.name,
|
name: addon.name,
|
||||||
slug: addon.slug,
|
slug: addon.slug,
|
||||||
version: addon.version,
|
version: addon.version,
|
||||||
icon: addonIcons[addon.slug],
|
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 => {
|
private _parseValue = memoizeOne((value?: BackupData): SelectedItems => {
|
||||||
@ -148,13 +136,9 @@ export class HaBackupDataPicker extends LitElement {
|
|||||||
homeassistant.push("database");
|
homeassistant.push("database");
|
||||||
}
|
}
|
||||||
|
|
||||||
let folders = [...value.folders];
|
const 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);
|
|
||||||
}
|
|
||||||
homeassistant.push(...folders);
|
homeassistant.push(...folders);
|
||||||
|
const addonsList = value.addons.map((addon) => addon.slug);
|
||||||
addons.push(...addonsList);
|
addons.push(...addonsList);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@ -171,11 +155,8 @@ export class HaBackupDataPicker extends LitElement {
|
|||||||
addons: data.addons.filter((addon) =>
|
addons: data.addons.filter((addon) =>
|
||||||
selectedItems.addons.includes(addon.slug)
|
selectedItems.addons.includes(addon.slug)
|
||||||
),
|
),
|
||||||
folders: data.folders.filter(
|
folders: data.folders.filter((folder) =>
|
||||||
(folder) =>
|
selectedItems.homeassistant.includes(folder)
|
||||||
selectedItems.homeassistant.includes(folder) ||
|
|
||||||
(selectedItems.addons.includes(folder) &&
|
|
||||||
folder === SELF_CREATED_ADDONS_FOLDER)
|
|
||||||
),
|
),
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user