/campaigns/) is the entry surface for activation. It uses
the same GET /events/ endpoint as the Lookout Events list, with
Wave-specific filter defaults. Opening a row shows a drawer (desktop) or
navigates to the full-page Campaign detail
(mobile).
What you’ll build
- The same filterable, infinite-scroll events table as Lookout.
- A drawer that opens inline on desktop (
?drawer-open=true&event-id=...). - Mobile: navigate to
/campaigns/:id.
Prerequisites
- An authenticated user with
Permissions.wave— the route is gated; without it the user can’t reach the list at all. X-Preferred-Partner-Idset.
The call chain
On mount:| # | Method | Path | Purpose |
|---|---|---|---|
| 1 | GET | /events/?... | First page of events with the URL-driven filter set. |
?drawer-open=true&event-id=...):
| # | Method | Path | Purpose |
|---|---|---|---|
| 2 | GET | /events/{eid} | Selected event for the drawer. |
Filter parameters
Same set as Events list. Wave differs from Lookout mainly in that it does not forceexclude_products=true.
The reference FE builds filters with fetchEvents(...) and
getEventFetchFilters(...), using local page reducers — there is no
useEventsList hook. If you build your own hook, that’s fine; just don’t
expect to find one in the reference source.
Reference implementation
Pagination
The shared table/filter components come from Lookout. Pagination is infinite scroll, not classic page-number pagination — append on scroll-near-bottom.Gotchas
No KPI strip / no /campaigns/statistics on mount
No KPI strip / no /campaigns/statistics on mount
The reference Wave list doesn’t load statistics. That’s a Dashboard
concern.
`Permissions.wave` gates the whole route
`Permissions.wave` gates the whole route
Users without Wave permission can’t open the list — not “see it but
can’t click rows”.
Row click: drawer on desktop, navigate on mobile
Row click: drawer on desktop, navigate on mobile
The drawer still exists
The drawer still exists
It was not removed.
drawer-open=true in the URL restores it.Don't force exclude_products=true
Don't force exclude_products=true
That’s a Lookout default. Wave includes product events.
Related
- Campaign detail — the drawer / full-page target.
- Lookout — Events list — same endpoint.
- Pagination cookbook.