diff --git a/assets/js/views/History.vue b/assets/js/views/History.vue index 5d7be6722..82038dffe 100644 --- a/assets/js/views/History.vue +++ b/assets/js/views/History.vue @@ -154,6 +154,7 @@ export default defineComponent({ month: { type: Number, default: undefined }, year: { type: Number, default: undefined }, period: { type: String as PropType, default: undefined }, + offline: Boolean, }, data() { return { @@ -340,6 +341,9 @@ export default defineComponent({ fetchKey() { this.fetchData(); }, + offline(offline) { + if (!offline) this.fetchData(); + }, rawSeries() { // Drop focused entries whose paletteIndex no longer matches any entity // in the new data (e.g. a loadpoint was filtered out after a period @@ -498,7 +502,7 @@ export default defineComponent({ this.displayPeriod = requestPeriod; } catch (e) { console.error("Failed to load energy history", e); - this.rawSeries = []; + // keep previous data on error } finally { this.loading = false; } diff --git a/tests/energy-history.spec.ts b/tests/energy-history.spec.ts index c728b30b3..e841a0c78 100644 --- a/tests/energy-history.spec.ts +++ b/tests/energy-history.spec.ts @@ -1,5 +1,5 @@ import { test, expect, type Page, type Locator } from "@playwright/test"; -import { start, stop, baseUrl } from "./evcc"; +import { start, stop, restart, baseUrl } from "./evcc"; test.use({ baseURL: baseUrl() }); @@ -219,3 +219,14 @@ test.describe("consumption breakdown", () => { await expect.poll(() => yAxis(meterChart)).toEqual(["kW", "0.0", "0.3", "0.6", "0.9", "1.2"]); }); }); + +test.describe("reconnect", () => { + test("history still shows content after backend restart", async ({ page }) => { + await gotoDay(page, 2026, 3, 24); + await expect(chart(page, "grid")).toBeVisible(); + + await restart(); + + await expect(chart(page, "grid")).toBeVisible(); + }); +});