From 0d6333f8baca4adace945cb9dfbe3801dbd7515d Mon Sep 17 00:00:00 2001 From: Jorge Manrubia Date: Thu, 2 Oct 2025 15:07:52 +0200 Subject: [PATCH] Use frame-based pagination for the activity timeline --- app/controllers/cards_controller.rb | 4 ++-- app/helpers/events_helper.rb | 11 ----------- app/helpers/pagination_helper.rb | 13 +++++++++++++ app/views/events/days/index.html.erb | 4 ++++ app/views/events/days/index.turbo_stream.erb | 7 ------- app/views/events/index.html.erb | 11 +++++++---- 6 files changed, 26 insertions(+), 24 deletions(-) create mode 100644 app/views/events/days/index.html.erb delete mode 100644 app/views/events/days/index.turbo_stream.erb diff --git a/app/controllers/cards_controller.rb b/app/controllers/cards_controller.rb index cd8abfaa8..526806879 100644 --- a/app/controllers/cards_controller.rb +++ b/app/controllers/cards_controller.rb @@ -52,8 +52,8 @@ class CardsController < ApplicationController @card = Current.user.accessible_cards.find params[:id] end - def suppressing_broadcasts_unless_published(&block) - if @card.published? + def suppressing_broadcasts_unless_published(card, &block) + if card.published? yield else Collection.suppressing_turbo_broadcasts(&block) diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index 0eecdb25f..9200f84b7 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -52,17 +52,6 @@ module EventsHelper tag.div class: "events__time-block", style: "grid-area: #{row}/#{col}", & end - def event_next_page_link(next_day) - if next_day - tag.div id: "next_page", - data: { controller: "fetch-on-visible", - fetch_on_visible_url_value: events_days_path( - day: next_day.strftime("%Y-%m-%d"), - **@filter.as_params - ) } - end - end - def event_action_sentence(event) if event.action.comment_created? comment_event_action_sentence(event) diff --git a/app/helpers/pagination_helper.rb b/app/helpers/pagination_helper.rb index 8f2fc7988..3fdbe4923 100644 --- a/app/helpers/pagination_helper.rb +++ b/app/helpers/pagination_helper.rb @@ -35,6 +35,19 @@ module PaginationHelper end end + def day_timeline_pagination_frame_tag(day_timeline, &) + turbo_frame_tag day_timeline_pagination_frame_id_for(day_timeline.day), data: { timeline_target: "frame" }, role: "presentation", refresh: :morph, & + end + + def day_timeline_pagination_frame_id_for(day) + "day-timeline-pagination-contents-#{day.strftime("%Y-%m-%d")}" + end + + def day_timeline_pagination_link(day_timeline, filter) + link_to "Load more...", events_days_path(day: day_timeline.next_day.strftime("%Y-%m-%d"), **filter.as_params), + data: { frame: day_timeline_pagination_frame_id_for(day_timeline.next_day), pagination_target: "paginationLink" } + end + private def pagination_list(name, tag_element: :div, paginate_on_scroll: false, **properties, &block) classes = properties.delete(:class) diff --git a/app/views/events/days/index.html.erb b/app/views/events/days/index.html.erb new file mode 100644 index 000000000..9529e8018 --- /dev/null +++ b/app/views/events/days/index.html.erb @@ -0,0 +1,4 @@ +<%= day_timeline_pagination_frame_tag @day_timeline do %> + <%= render "events/day", day_timeline: @day_timeline %> + <%= day_timeline_pagination_link(@day_timeline, @filter) %> +<% end %> diff --git a/app/views/events/days/index.turbo_stream.erb b/app/views/events/days/index.turbo_stream.erb deleted file mode 100644 index cceb2d352..000000000 --- a/app/views/events/days/index.turbo_stream.erb +++ /dev/null @@ -1,7 +0,0 @@ -<%= turbo_stream.append :activity do %> - <%= render "events/day", day_timeline: @day_timeline %> -<% end %> - -<%= turbo_stream.replace :next_page do %> - <%= event_next_page_link(@day_timeline.next_day) %> -<% end %> diff --git a/app/views/events/index.html.erb b/app/views/events/index.html.erb index 33f1df935..dad76f7f2 100644 --- a/app/views/events/index.html.erb +++ b/app/views/events/index.html.erb @@ -14,7 +14,10 @@ <% end %> -
- <%= render "events/day", day_timeline: @day_timeline %> -
-<%= event_next_page_link(@day_timeline.next_day) %> +<%= tag.div id: "activity", class: "events", data: { controller: "pagination", pagination_paginate_on_intersection_value: true } do %> + <%= day_timeline_pagination_frame_tag @day_timeline do %> + <%= render "events/day", day_timeline: @day_timeline %> + + <%= day_timeline_pagination_link(@day_timeline, @filter) %> + <% end %> +<% end %>