diff --git a/src/components/event/EventDetailModal.tsx b/src/components/event/EventDetailModal.tsx index 2a220aa..a18e009 100644 --- a/src/components/event/EventDetailModal.tsx +++ b/src/components/event/EventDetailModal.tsx @@ -25,6 +25,7 @@ interface EventDetailModalProps { onRegister: () => void; onUnregister: () => void; onComplete: (data: { litterCollected: number; photos: string[] }) => Promise; + onCancel?: () => void; isLoading?: boolean; } @@ -36,6 +37,7 @@ export function EventDetailModal({ onRegister, onUnregister, onComplete, + onCancel, isLoading = false, }: EventDetailModalProps) { const mapRef = useRef(null); @@ -271,21 +273,41 @@ export function EventDetailModal({ > {showCompletionForm ? 'Hide Completion Form' : 'Complete Event'} + {onCancel && ( + + )} ) : isOrganizer && !hasEventPassed ? ( -
-
- - - - - You can complete this event after {format(new Date(event.scheduledDate), 'MMM d, yyyy')} - +
+
+
+ + + + + You can complete this event after {format(new Date(event.scheduledDate), 'MMM d, yyyy')} + +
+ {onCancel && ( + + )}
) : isRegistered ? (
diff --git a/src/pages/EventsPage.tsx b/src/pages/EventsPage.tsx index 5ee4e41..536f6e4 100644 --- a/src/pages/EventsPage.tsx +++ b/src/pages/EventsPage.tsx @@ -186,6 +186,27 @@ export function EventsPage() { } }; + const handleCancelEvent = async () => { + if (!selectedEvent) return; + + if (!confirm('Are you sure you want to cancel this event? This action cannot be undone.')) { + return; + } + + try { + setIsSubmitting(true); + setError(null); + await eventService.updateEvent(selectedEvent.id, { status: 'cancelled' }); + setSelectedEvent(null); + await loadEvents(); + } catch (err: any) { + setError(err.message || 'Failed to cancel event. Please try again.'); + console.error('Error cancelling event:', err); + } finally { + setIsSubmitting(false); + } + }; + return (
{/* Header */} @@ -279,6 +300,7 @@ export function EventsPage() { onRegister={() => handleRegister(selectedEvent.id)} onUnregister={handleUnregister} onComplete={handleCompleteEvent} + onCancel={isOrganizer ? handleCancelEvent : undefined} isLoading={isSubmitting} /> )}