diff --git a/handlers.go b/handlers.go index 62705e4..b9bf4f4 100644 --- a/handlers.go +++ b/handlers.go @@ -121,10 +121,17 @@ type SlotView struct { Pct int64 } +type GoingPerson struct { + Name string + Note string + RsvpID int64 +} + type EventPageData struct { Event db.Event Slots []SlotView Rsvps []db.Rsvp + GoingList []GoingPerson TotalGoing int64 IsAdmin bool BaseURL string @@ -180,6 +187,20 @@ func (s *Server) loadEventPage(r *http.Request, slug string, isAdmin bool) (*Eve } totalGoing += int64(len(rsvps)) + // Build deduplicated GoingList: RSVPs first, then claim-only people + var goingList []GoingPerson + seen := make(map[string]bool) + for _, r := range rsvps { + goingList = append(goingList, GoingPerson{Name: r.Name, Note: r.Note, RsvpID: r.ID}) + seen[strings.ToLower(r.Name)] = true + } + for _, c := range claims { + if !seen[strings.ToLower(c.Name)] { + goingList = append(goingList, GoingPerson{Name: c.Name}) + seen[strings.ToLower(c.Name)] = true + } + } + var descHTML template.HTML if event.Description != "" { descHTML = RenderMarkdown(event.Description) @@ -189,6 +210,7 @@ func (s *Server) loadEventPage(r *http.Request, slug string, isAdmin bool) (*Eve Event: event, Slots: slotViews, Rsvps: rsvps, + GoingList: goingList, TotalGoing: totalGoing, IsAdmin: isAdmin, BaseURL: s.baseURL, diff --git a/templates/slots.html b/templates/slots.html index bff8576..3171d5c 100644 --- a/templates/slots.html +++ b/templates/slots.html @@ -32,17 +32,19 @@ {{end}} -
Going ({{len .Rsvps}})
+
Going ({{.TotalGoing}})
- {{if .Rsvps}} - {{range .Rsvps}} + {{if .GoingList}} + {{range .GoingList}} {{.Name}}{{if .Note}} ({{.Note}}){{end}} - + {{end}} {{end}} {{else}}