diff --git a/hassio/src/snapshots/hassio-snapshots.ts b/hassio/src/snapshots/hassio-snapshots.ts
index 6ed974dfca..8fd5a9ed15 100644
--- a/hassio/src/snapshots/hassio-snapshots.ts
+++ b/hassio/src/snapshots/hassio-snapshots.ts
@@ -24,6 +24,7 @@ import "../../../src/components/ha-button-menu";
import "../../../src/components/ha-fab";
import {
fetchHassioSnapshots,
+ friendlyFolderName,
HassioSnapshot,
reloadHassioSnapshots,
} from "../../../src/data/hassio/snapshot";
@@ -66,6 +67,33 @@ export class HassioSnapshots extends LitElement {
await this.fetchSnapshots();
}
+ private _computeSnapshotContent = (snapshot: HassioSnapshot): string => {
+ if (snapshot.type === "full") {
+ return this.supervisor.localize("snapshot.full_snapshot");
+ }
+ const content: string[] = [];
+ if (snapshot.content.homeassistant) {
+ content.push("Home Assistant");
+ }
+ if (snapshot.content.folders.length !== 0) {
+ for (const folder of snapshot.content.folders) {
+ content.push(friendlyFolderName[folder] || folder);
+ }
+ }
+
+ if (snapshot.content.addons.length !== 0) {
+ for (const addon of snapshot.content.addons) {
+ content.push(
+ this.supervisor.supervisor.addons.find(
+ (entry) => entry.slug === addon
+ )?.name || addon
+ );
+ }
+ }
+
+ return content.join(", ");
+ };
+
protected firstUpdated(changedProperties: PropertyValues): void {
super.firstUpdated(changedProperties);
if (this.hass && this.isConnected) {
@@ -81,7 +109,9 @@ export class HassioSnapshots extends LitElement {
sortable: true,
filterable: true,
grows: true,
- template: (entry: string, snapshot: any) => entry || snapshot.slug,
+ template: (entry: string, snapshot: any) =>
+ html`${entry || snapshot.slug}
+
${snapshot.secondary}
`,
},
date: {
title: this.supervisor?.localize("snapshot.created") || "",
@@ -93,17 +123,21 @@ export class HassioSnapshots extends LitElement {
template: (entry: string) =>
relativeTime(new Date(entry), this.hass.localize),
},
- type: {
- title: this.supervisor?.localize("snapshot.type") || "",
- width: "15%",
- hidden: narrow,
+ secondary: {
+ title: "",
+ hidden: true,
filterable: true,
- sortable: true,
- template: (entry: string) => (entry === "partial" ? "Partial" : "Full"),
},
})
);
+ private _snapshotData = memoizeOne((snapshots: HassioSnapshot[]) =>
+ snapshots.map((snapshot) => ({
+ ...snapshot,
+ secondary: this._computeSnapshotContent(snapshot),
+ }))
+ );
+
protected render(): TemplateResult {
if (!this.supervisor) {
return html``;
@@ -118,7 +152,7 @@ export class HassioSnapshots extends LitElement {
.narrow=${this.narrow}
.route=${this.route}
.columns=${this._columns(this.narrow)}
- .data=${this._snapshots}
+ .data=${this._snapshotData(this._snapshots || [])}
id="slug"
@row-click=${this._handleRowClicked}
clickable
diff --git a/src/data/hassio/snapshot.ts b/src/data/hassio/snapshot.ts
index 77df1be76e..0281f0d9a4 100644
--- a/src/data/hassio/snapshot.ts
+++ b/src/data/hassio/snapshot.ts
@@ -2,12 +2,27 @@ import { atLeastVersion } from "../../common/config/version";
import { HomeAssistant } from "../../types";
import { hassioApiResultExtractor, HassioResponse } from "./common";
+export const friendlyFolderName = {
+ ssl: "SSL",
+ homeassistant: "Configuration",
+ "addons/local": "Local add-ons",
+ media: "Media",
+ share: "Share",
+};
+
+interface SnapshotContent {
+ homeassistant: boolean;
+ folders: string[];
+ addons: string[];
+}
+
export interface HassioSnapshot {
slug: string;
date: string;
name: string;
type: "full" | "partial";
protected: boolean;
+ content: SnapshotContent;
}
export interface HassioSnapshotDetail extends HassioSnapshot {