| 04-marketplace-portal-navigation |
02 |
ui |
| react |
| zustand |
| next-intl |
| marketplace |
| filtering |
| tenant-context |
| dialog |
| toast |
|
| phase |
provides |
| 04-marketplace-portal-navigation/01 |
MarketplaceCard, page.tsx, marketplace-store, i18n namespace |
|
|
| Live search with debounce (MarketplaceSearch) |
| Status tabs (Alle/Aktiviert/Verfuegbar) with counts |
| Category chip filter row |
| Client-side multi-dimension filtering (search AND status AND category) |
| Toast notification system (Zustand store + ToastContainer) |
| Super-Admin TenantContextSelector (tenant dropdown → x-tenant-id header) |
| ActivationDialog (deactivation confirmation) |
| Module detail page at /marketplace/[slug] |
| Asymmetric toggle UX (immediate activate + toast, confirm dialog for deactivate) |
|
| 04-03 sidebar |
| 04-04 navigation |
|
| added |
patterns |
|
|
| client-side multi-dimension filter with useMemo |
| hand-rolled toast store |
| focus-trapped dialog |
| asymmetric activation UX |
|
|
| created |
modified |
| apps/web/src/app/(portal)/marketplace/components/MarketplaceSearch.tsx |
| apps/web/src/app/(portal)/marketplace/components/StatusFilter.tsx |
| apps/web/src/app/(portal)/marketplace/components/CategoryFilter.tsx |
| apps/web/src/app/(portal)/marketplace/components/Toast.tsx |
| apps/web/src/app/(portal)/marketplace/components/TenantContextSelector.tsx |
| apps/web/src/app/(portal)/marketplace/components/ActivationDialog.tsx |
| apps/web/src/app/(portal)/marketplace/[slug]/page.tsx |
|
| apps/web/src/app/(portal)/marketplace/page.tsx |
|
|
| Client-side filtering via useMemo — dataset small, all modules loaded |
| Hand-rolled toast + dialog — no new dependencies (project convention) |
| Asymmetric UX: activation immediate with toast, deactivation gated by dialog |
| TenantContextSelector is display + header only — no impersonation (D-04 boundary) |
|
| useMemo composing AND filters across search + status + category |
| Zustand toast store with auto-dismiss setTimeout |
| ActivationDialog with basic focus trap (Tab between 2 buttons, Escape = cancel) |
|
|
12min |
2026-06-23 |