- Added 'View Event Details' button in event popup that navigates to /events?id={eventId}
- Adjusted map center from Dublin (53.3498, -6.2603) to (53.4, -7.5) to better show all of Ireland
- New center point ensures Ireland is fully visible even when filter panel is open
- Button has blue styling with hover effect for better UX
4.5 KiB
4.5 KiB
Map-Event Integration Implementation
Overview
Successfully integrated cleanup events with the interactive map, allowing users to view both litter reports and cleanup events on the same map interface.
Changes Made
1. MapPage Component (src/pages/MapPage.tsx)
Added:
- Event state management with
useStatefor events and loading state useEffecthook to fetch events from the API on component mount- Sample event data as fallback when API is unavailable
- Event visibility toggle state (
showEvents) - Handler function
handleToggleEvents()to show/hide events - Fixed date filter conversion from Date objects to ISO strings for API compatibility
Key Features:
- Events are fetched independently from reports
- Loading states for both reports and events
- Events passed to MapView component only when
showEventsis true
2. MapView Component (src/components/map/MapView.tsx)
Enhanced:
- Event marker popups with rich information display:
- Event title and description
- Location name with map pin emoji
- Scheduled date and time (formatted for Irish locale)
- Duration in minutes
- Participant count
- Litter collected (for completed events)
- Status badge with color coding
- Event markers use calendar emoji (📅)
- Different marker colors based on event status:
- Upcoming: Amber (#F59E0B)
- Completed: Green (#10B981)
- Cancelled: Gray (#6B7280)
Event Marker Features:
- Always displayed on regular layer (not clustered)
- 32x32 pixel markers with white border
- Hover effects and click interactions
- Detailed popup with formatted information
3. MapFilters Component (src/components/map/MapFilters.tsx)
Added:
- "Show Events" toggle switch
- Props:
onToggleEventsandshowEvents - Green color scheme for event toggle (to distinguish from other toggles)
- Positioned above the Hotspots toggle
Sample Event Data
Three sample events are provided as fallback:
- Sandymount Beach Cleanup (Dublin) - Upcoming
- Galway Bay Cleanup (Salthill Beach) - Upcoming
- Cork Harbor Cleanup - Completed (with 45.5 kg collected)
User Experience
Viewing Events on Map
- Navigate to the Map page
- Events are displayed by default with calendar markers
- Click on an event marker to see detailed information
- Toggle "Show Events" in the filters panel to hide/show events
Event Information Display
Each event popup shows:
- 📍 Location name
- 📅 Scheduled date and time
- ⏱️ Duration
- 👥 Number of participants
- ♻️ Litter collected (for completed events)
- Status badge (color-coded)
- Event description
API Integration
Event Service
Uses eventService.getEvents() to fetch events from the backend:
- Endpoint:
GET /api/events - Returns array of
CleanupEventobjects - Supports optional filters (status, date range, location)
Error Handling
- Falls back to sample data if API call fails
- Logs errors to console for debugging
- Graceful degradation ensures map remains functional
Technical Details
Type Safety
- Full TypeScript support with
CleanupEventinterface - Type-safe props and state management
- Proper type conversion for date filters
Performance
- Events fetched once on component mount
- Separate loading states for reports and events
- Efficient marker rendering with Leaflet
Accessibility
- Toggle switches with proper ARIA labels
- Semantic HTML structure
- Keyboard navigation support
Future Enhancements
Potential improvements:
- Filter events by status (upcoming/completed/cancelled)
- Click event marker to navigate to event detail page
- Show event radius/coverage area on map
- Link related reports to events
- Real-time event updates with WebSockets
- Event clustering for dense areas
- Calendar view integration
Testing
To test the implementation:
- Start the backend server:
cd server && npm run dev - Start the frontend:
npm run dev - Navigate to the Map page
- Verify events appear on the map
- Click event markers to see popups
- Toggle "Show Events" to hide/show markers
- Check that event colors match their status
Related Requirements
This implementation addresses:
- Requirement 4.1: Display event markers on map
- Requirement 4.2: Show event details on click
- Requirement 4.3: Display participant count
- Requirement 2.1: Interactive map visualization
- Requirement 2.2: Marker click handlers
Commit
Changes committed with message:
Link map items with events - Display cleanup events on interactive map
Git hash: 91ecbd2