Skip to content

Commit 893f878

Browse files
committed
feat(homepage): limit upcoming events to 5, preserve 3 dates
1 parent 7b264ff commit 893f878

1 file changed

Lines changed: 23 additions & 1 deletion

File tree

app/controllers/dashboard_controller.rb

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ class DashboardController < ApplicationController
33
skip_before_action :accept_terms, except: %i[dashboard show]
44

55
DEFAULT_UPCOMING_EVENTS = 5
6+
MAX_WORKSHOP_QUERY = 10
67

78
helper_method :year_param
89

@@ -12,6 +13,7 @@ def show
1213
@upcoming_workshops = upcoming_events.map.each_with_object({}) do |(key, value), hash|
1314
hash[key] = EventPresenter.decorate_collection(value)
1415
end
16+
@has_more_events = total_upcoming_events_count > DEFAULT_UPCOMING_EVENTS
1517

1618
@testimonials = Testimonial.order(Arel.sql('RANDOM()')).limit(5).includes(:member)
1719
end
@@ -56,7 +58,27 @@ def top_coach_query
5658

5759
def upcoming_events
5860
workshops = Workshop.upcoming.includes(:chapter, :sponsors, :organisers)
59-
all_events(workshops).sort_by(&:date_and_time).group_by(&:date)
61+
.limit(MAX_WORKSHOP_QUERY)
62+
sorted_events = all_events(workshops).sort_by(&:date_and_time)
63+
64+
limited_events = []
65+
dates_shown = 0
66+
prev_date = nil
67+
68+
sorted_events.each do |event|
69+
dates_shown += 1 if event.date != prev_date
70+
prev_date = event.date
71+
break if dates_shown > 3 || limited_events.size >= DEFAULT_UPCOMING_EVENTS
72+
73+
limited_events << event
74+
end
75+
76+
limited_events.group_by(&:date)
77+
end
78+
79+
def total_upcoming_events_count
80+
workshops = Workshop.upcoming.includes(:chapter, :sponsors, :organisers)
81+
all_events(workshops).count
6082
end
6183

6284
def upcoming_events_for_user

0 commit comments

Comments
 (0)