summaryrefslogtreecommitdiff
path: root/issues/bug_002_tab_state.md
blob: c8c7c09112a8fdb65efa6f4ce28db4bd48d3048e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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.