summaryrefslogtreecommitdiff
path: root/issues/bug_002_tab_state.md
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-01-13 13:37:34 -1000
committerPeter Stone <thepeterstone@gmail.com>2026-01-13 13:37:34 -1000
commit81f1e7a489c62f21bb71b7402a2758735cddef57 (patch)
tree2cf8f59880df84dfe69b33cd985de285def67451 /issues/bug_002_tab_state.md
parenta1fa857a2f5ab163ffe5abbdeeb0eba8fc9508e9 (diff)
Add issue tracking documentation
- bug_001_template_rendering.md: Template error documentation - bug_002_tab_state.md: Tab state persistence issue (now resolved) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Diffstat (limited to 'issues/bug_002_tab_state.md')
-rw-r--r--issues/bug_002_tab_state.md31
1 files changed, 31 insertions, 0 deletions
diff --git a/issues/bug_002_tab_state.md b/issues/bug_002_tab_state.md
new file mode 100644
index 0000000..c8c7c09
--- /dev/null
+++ b/issues/bug_002_tab_state.md
@@ -0,0 +1,31 @@
+# Bug 002: Tab State Persistence (RESOLVED)
+
+## Status
+**RESOLVED**
+
+## Description
+When a user switches tabs (e.g., to "Notes") and refreshes the page, the dashboard resets to the default "Tasks" tab. This is a poor user experience. The application should respect the `?tab=` query parameter and update the URL when tabs are switched.
+
+## Root Cause
+1. **Server-Side:** `HandleDashboard` does not read the `tab` query parameter or pass it to the template.
+2. **Client-Side:** `index.html` hardcodes the initial active tab to "Tasks".
+3. **Client-Side:** Tab buttons use `hx-push-url="false"`, so the URL doesn't update on click.
+
+## Resolution
+1. **Model Update:** Added `ActiveTab` field to `DashboardData` struct in `internal/models/types.go`.
+2. **Handler Update:** Updated `HandleDashboard` in `internal/handlers/handlers.go` to:
+ * Read `r.URL.Query().Get("tab")`.
+ * Validate the tab name (defaulting to "tasks").
+ * Set `ActiveTab` in the data passed to the template.
+3. **Template Update:** Updated `web/templates/index.html` to:
+ * Use `{{if eq .ActiveTab "..."}}` to conditionally apply the `tab-button-active` class.
+ * Set the initial `hx-get` for `#tab-content` to `/tabs/{{.ActiveTab}}`.
+ * Set `hx-push-url="?tab=..."` on all tab buttons to ensure the URL updates in the browser history.
+4. **Client-Side Update:** Updated `web/static/js/app.js` to initialize `currentTab` from the URL query parameter.
+
+## Verification
+* **Automated Test:** Created `internal/handlers/tab_state_test.go` which verifies:
+ * Default load (`/`) renders "tasks" as active.
+ * Query param load (`/?tab=notes`) renders "notes" as active.
+ * All valid tab names are supported.
+* **Manual Verification:** Confirmed that clicking tabs updates the URL and refreshing the page preserves the active tab.