@@ -20,11 +20,24 @@ document.addEventListener("DOMContentLoaded", () => {
2020
2121 const spotsLeft = details . max_participants - details . participants . length ;
2222
23+ const participantsList = details . participants
24+ . map (
25+ ( p ) =>
26+ `<li><span class="participant-email">${ p } </span><button class="remove-btn" data-activity="${ name } " data-email="${ p } " title="Remove ${ p } ">✕</button></li>`
27+ )
28+ . join ( "" ) ;
29+
2330 activityCard . innerHTML = `
2431 <h4>${ name } </h4>
2532 <p>${ details . description } </p>
2633 <p><strong>Schedule:</strong> ${ details . schedule } </p>
2734 <p><strong>Availability:</strong> ${ spotsLeft } spots left</p>
35+ <div class="participants-section">
36+ <strong>Participants:</strong>
37+ <ul class="participants-list">
38+ ${ participantsList || "<li class='no-participants'>No participants yet</li>" }
39+ </ul>
40+ </div>
2841 ` ;
2942
3043 activitiesList . appendChild ( activityCard ) ;
@@ -62,6 +75,7 @@ document.addEventListener("DOMContentLoaded", () => {
6275 messageDiv . textContent = result . message ;
6376 messageDiv . className = "success" ;
6477 signupForm . reset ( ) ;
78+ fetchActivities ( ) ;
6579 } else {
6680 messageDiv . textContent = result . detail || "An error occurred" ;
6781 messageDiv . className = "error" ;
@@ -81,6 +95,41 @@ document.addEventListener("DOMContentLoaded", () => {
8195 }
8296 } ) ;
8397
98+ // Handle participant removal
99+ activitiesList . addEventListener ( "click" , async ( event ) => {
100+ const btn = event . target . closest ( ".remove-btn" ) ;
101+ if ( ! btn ) return ;
102+
103+ const activity = btn . dataset . activity ;
104+ const email = btn . dataset . email ;
105+
106+ try {
107+ const response = await fetch (
108+ `/activities/${ encodeURIComponent ( activity ) } /signup?email=${ encodeURIComponent ( email ) } ` ,
109+ { method : "DELETE" }
110+ ) ;
111+
112+ const result = await response . json ( ) ;
113+
114+ if ( response . ok ) {
115+ messageDiv . textContent = result . message ;
116+ messageDiv . className = "success" ;
117+ fetchActivities ( ) ;
118+ } else {
119+ messageDiv . textContent = result . detail || "An error occurred" ;
120+ messageDiv . className = "error" ;
121+ }
122+
123+ messageDiv . classList . remove ( "hidden" ) ;
124+ setTimeout ( ( ) => messageDiv . classList . add ( "hidden" ) , 5000 ) ;
125+ } catch ( error ) {
126+ messageDiv . textContent = "Failed to unregister. Please try again." ;
127+ messageDiv . className = "error" ;
128+ messageDiv . classList . remove ( "hidden" ) ;
129+ console . error ( "Error unregistering:" , error ) ;
130+ }
131+ } ) ;
132+
84133 // Initialize app
85134 fetchActivities ( ) ;
86135} ) ;
0 commit comments