@@ -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