From af6d53288892230549dbdc5a633f49dae5ed463a Mon Sep 17 00:00:00 2001 From: cfrei Date: Wed, 9 Jul 2025 11:31:34 +0200 Subject: [PATCH] Add localStorage persistence for dashboard filter settings - Save filter state (status, active, tags) to localStorage when changed - Restore saved filters on component mount - Include error handling for localStorage operations - Maintain backward compatibility with existing filter functionality Closes the gap in user experience by persisting filter preferences across browser sessions on the dashboard monitor list. --- src/components/MonitorList.vue | 37 ++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/components/MonitorList.vue b/src/components/MonitorList.vue index a579316b3..cc51fe358 100644 --- a/src/components/MonitorList.vue +++ b/src/components/MonitorList.vue @@ -206,6 +206,7 @@ export default { }, mounted() { window.addEventListener("scroll", this.onScroll); + this.loadFilterState(); }, beforeUnmount() { window.removeEventListener("scroll", this.onScroll); @@ -244,6 +245,7 @@ export default { */ updateFilter(newFilter) { this.filterState = newFilter; + this.saveFilterState(); }, /** * Deselect a monitor @@ -384,6 +386,41 @@ export default { } return m1.name.localeCompare(m2.name); + }, + /** + * Save filter state to localStorage + * @returns {void} + */ + saveFilterState() { + try { + const filterData = { + status: this.filterState.status, + active: this.filterState.active, + tags: this.filterState.tags + }; + localStorage.setItem("uptimeKumaFilters", JSON.stringify(filterData)); + } catch (error) { + console.error("Failed to save filter state:", error); + } + }, + /** + * Load filter state from localStorage + * @returns {void} + */ + loadFilterState() { + try { + const savedFilters = localStorage.getItem("uptimeKumaFilters"); + if (savedFilters) { + const filterData = JSON.parse(savedFilters); + this.filterState = { + status: filterData.status || null, + active: filterData.active || null, + tags: filterData.tags || null + }; + } + } catch (error) { + console.error("Failed to load filter state:", error); + } } }, };