diff --git a/priv/ui/app.js b/priv/ui/app.js index 64319f3..639b650 100644 --- a/priv/ui/app.js +++ b/priv/ui/app.js @@ -15,6 +15,7 @@ const state = { status: clone(bootstrap.status), projects: normalizeProjects(bootstrap.projects), sidebarContent: clone(bootstrap.content.sidebar), + sidebarFilterSeeds: clone(bootstrap.content.sidebar), sidebarFilters: hydrateSidebarFilters(bootstrap.content.sidebar), projectMenuOpen: false, taskStatus: normalizeTaskStatus(bootstrap.task_status), @@ -569,9 +570,13 @@ function defaultSidebarFilterState(viewId, data) { }; } +function sidebarFilterSeed(viewId) { + return state.sidebarFilterSeeds[viewId] || state.sidebarContent[viewId] || null; +} + function currentSidebarFilterState(viewId) { if (!state.sidebarFilters[viewId]) { - state.sidebarFilters[viewId] = defaultSidebarFilterState(viewId, state.sidebarContent[viewId]); + state.sidebarFilters[viewId] = defaultSidebarFilterState(viewId, sidebarFilterSeed(viewId)); } return state.sidebarFilters[viewId]; @@ -1219,7 +1224,7 @@ function bindEvents() { const viewId = button.dataset.sidebarClearFilters; const existing = currentSidebarFilterState(viewId); state.sidebarFilters[viewId] = { - ...defaultSidebarFilterState(viewId, state.sidebarContent[viewId]), + ...defaultSidebarFilterState(viewId, sidebarFilterSeed(viewId)), showFilters: existing.showFilters, archiveCollapsed: existing.archiveCollapsed, tagsCollapsed: existing.tagsCollapsed, diff --git a/test/bds/ui/shell_test.exs b/test/bds/ui/shell_test.exs index 0386306..52fca71 100644 --- a/test/bds/ui/shell_test.exs +++ b/test/bds/ui/shell_test.exs @@ -207,6 +207,15 @@ defmodule BDS.UI.ShellTest do assert css =~ ".filter-status" end + test "clearing sidebar filters resets from the baseline seed instead of the filtered payload" do + js = File.read!("/Users/gb/Projects/bDS2/priv/ui/app.js") + + assert js =~ "sidebarFilterSeeds" + assert js =~ "function sidebarFilterSeed(viewId)" + assert js =~ "defaultSidebarFilterState(viewId, sidebarFilterSeed(viewId))" + refute js =~ "defaultSidebarFilterState(viewId, state.sidebarContent[viewId])" + end + test "static shell bundle exists for direct browser inspection" do assert File.exists?("/Users/gb/Projects/bDS2/priv/ui/index.html") assert File.exists?("/Users/gb/Projects/bDS2/priv/ui/app.css")