cd2c775692
fix: eliminate all TypeScript any usage across Vue components
...
Replace 24 `err: any` error handler types with proper `AxiosError<ApiErrorResponse>`
typing. Fix additional `as any` casts and `Record<string, any>` patterns in registration
field components, event settings, and portal layout. Create shared `ApiErrorResponse`
type for portal app.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-15 21:54:01 +02:00
f9faeb7ea0
feat(portal): restructure into three-screen architecture with event tabs
...
Replace scattered dashboard pages with a three-screen volunteer portal:
1. Mijn evenementen (/evenementen) - landing page with visual event cards
in a responsive grid, sorted upcoming-first
2. Event-pagina (/evenementen/:eventId) - single page with hash-based tabs
(Overzicht, Mijn rooster, Diensten claimen, Informatie) replacing the
old separate dashboard/my-shifts/claim-shifts pages
3. Mijn profiel (/profiel) - unchanged, platform-level settings
Key changes:
- Extract page content into tab components (RoosterTab, ClaimenTab,
OverzichtTab, InformatieTab) that receive eventId as prop
- Dual-mode navbar: platform mode (Crewli logo) vs event mode (org name
+ event name + back link)
- StatusCard now emits switchTab events instead of route navigation
- Smart login redirect: 1 event → direct to event, 2+ → overview
- Backward-compat redirects for /dashboard/* → /evenementen
- Delete EventSwitcher (replaced by events overview page)
- Update UserAvatarMenu with "Mijn evenementen" link
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-13 13:30:20 +02:00