feat(analytics): multi-select account filter with dimmed deselected cards #85

Merged
kreativmonkey merged 1 commit from feat/analytics-account-filter into main 2026-06-14 09:38:27 +02:00

Closes #80

Überarbeitet den Analytics-Accounts-Tab gemäß den beiden Wünschen im Issue.

1. Multi-Select-Filter mit "Zurücksetzen"

Die Account-Karten sind jetzt ein Mehrfach-Filter:

  • Default: alle Accounts ausgewählt.
  • Erster Klick filtert auf genau diesen Account.
  • Weitere Klicks wählen Accounts an/ab.
  • Werden alle (wieder) ausgewählt oder der letzte abgewählt, fällt die Auswahl auf „alle" zurück.
  • Ein Reset-Button stellt „alle" wieder her; das Pill zeigt den aktuellen Zustand (alle / ein Name / „N Konten ausgewählt").

2. Klar erkennbar, welcher Account betrachtet wird

Abgewählte („deaktivierte") Karten werden ausgegraut (opacity + grayscale), aktive bleiben hervorgehoben. Im Default-Zustand ist nichts ausgegraut.

Datenaggregation

Growth-Chart und Engagement-Heatmap aggregieren bei einer Teilauswahl client-seitig über die gewählten Accounts (Summe der pro-Account-Serien/Buckets), da das Backend nur Einzel- und Alle-Konten-Abfragen kennt. Bei „alle" wird wie bisher die all-Abfrage genutzt — Default-Verhalten unverändert.

Tests

Selektions- und Aggregationslogik liegen im reinen Modul accountSelection.ts, abgedeckt durch Playwright-Logik-Tests (e2e/account-selection.spec.ts, 7 Tests grün). Eine echte UI-e2e ist nicht möglich, weil das Verbinden von Accounts Live-Provider-Aufrufe braucht.

pnpm build (tsc + vite) und pnpm lint (0 errors) grün; Locales bleiben key-identisch.

🤖 Generated with Claude Code

Closes #80 Überarbeitet den Analytics-**Accounts**-Tab gemäß den beiden Wünschen im Issue. ## 1. Multi-Select-Filter mit "Zurücksetzen" Die Account-Karten sind jetzt ein Mehrfach-Filter: - **Default:** alle Accounts ausgewählt. - **Erster Klick** filtert auf genau diesen Account. - **Weitere Klicks** wählen Accounts an/ab. - Werden alle (wieder) ausgewählt oder der letzte abgewählt, fällt die Auswahl auf „alle" zurück. - Ein **Reset**-Button stellt „alle" wieder her; das Pill zeigt den aktuellen Zustand (alle / ein Name / „N Konten ausgewählt"). ## 2. Klar erkennbar, welcher Account betrachtet wird Abgewählte („deaktivierte") Karten werden **ausgegraut** (`opacity` + `grayscale`), aktive bleiben hervorgehoben. Im Default-Zustand ist nichts ausgegraut. ## Datenaggregation Growth-Chart und Engagement-Heatmap aggregieren bei einer Teilauswahl **client-seitig** über die gewählten Accounts (Summe der pro-Account-Serien/Buckets), da das Backend nur Einzel- und Alle-Konten-Abfragen kennt. Bei „alle" wird wie bisher die `all`-Abfrage genutzt — Default-Verhalten unverändert. ## Tests Selektions- und Aggregationslogik liegen im reinen Modul `accountSelection.ts`, abgedeckt durch Playwright-Logik-Tests (`e2e/account-selection.spec.ts`, 7 Tests grün). Eine echte UI-e2e ist nicht möglich, weil das Verbinden von Accounts Live-Provider-Aufrufe braucht. `pnpm build` (tsc + vite) und `pnpm lint` (0 errors) grün; Locales bleiben key-identisch. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(analytics): multi-select account filter with dimmed deselected cards
All checks were successful
CI/CD Workflow / Test Backend (Go) (pull_request) Successful in 2m55s
CI/CD Workflow / Test Frontend (Node.js) (pull_request) Successful in 1m20s
CI/CD Workflow / Test Postgres Store (pull_request) Successful in 1m18s
Website CI / Build website (pull_request) Successful in 54s
CI/CD Workflow / E2E (Playwright + Go) (pull_request) Successful in 6m51s
CI/CD Workflow / Build and Publish Docker Image (pull_request) Has been skipped
CI/CD Workflow / Trigger Dockhand Deployment (pull_request) Has been skipped
4ecca2fa35
Reworks the analytics Accounts tab per issue #80:

- account cards become a multi-select filter: the first click filters down
  to one account, further clicks toggle accounts in/out, and selecting all
  or removing the last one collapses back to "all" (the default)
- deselected accounts are dimmed/greyed so it is obvious which accounts are
  being viewed; a reset button returns to all accounts
- the growth chart and engagement heatmap aggregate client-side over the
  selected subset (summing per-account series/buckets), since the backend
  only exposes single-account and all-accounts queries

Selection and aggregation live in a pure accountSelection module covered by
Playwright logic tests (the UI cannot be driven e2e because connecting
accounts needs live provider calls).

Closes #80

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
kreativmonkey/goloom!85
No description provided.