Merge pull request #665

Refactor inbox to use a Turbo Streams-backed pagination
This commit is contained in:
Karina Kwiatek 2022-09-07 17:09:37 +02:00 committed by GitHub
commit f1a938407b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 20 additions and 24 deletions

View file

@ -49,7 +49,7 @@ class InboxController < ApplicationController
@disabled = true if @inbox.empty?
respond_to do |format|
format.html
format.js { render layout: false }
format.turbo_stream
end
end
end

View file

@ -1,14 +1,12 @@
#entries
- @inbox.each do |i|
= render "inbox/entry", i: i
= turbo_frame_tag "inbox" do
#entries
- @inbox.each do |i|
= render "inbox/entry", i: i
- if @inbox.empty?
= t(".empty")
- if @inbox.empty?
= t(".empty")
= render "shared/cursored_pagination_dummy", more_data_available: @more_data_available, last_id: @inbox_last_id
- if @more_data_available
.d-flex.justify-content-center.justify-content-sm-start
%button.btn.btn-light#load-more-btn{ type: :button, data: { last_id: @inbox_last_id } }
= t("voc.load")
- if @more_data_available
.d-flex.justify-content-center.justify-content-sm-start#paginator
= button_to inbox_path(last_id: @inbox_last_id), class: "btn btn-light" do
= t("voc.load")

View file

@ -1,9 +0,0 @@
$('#entries').append('<% @inbox.each do |i|
%><%= j render 'inbox/entry', i: i
%><% end %>');
<% if @more_data_available %>
$('#pagination').html('<%= j render 'shared/cursored_pagination_dummy', more_data_available: @more_data_available, last_id: @inbox_last_id %>');
<% else %>
$('#pagination, #load-more-btn').remove();
<% end %>
<% Inbox.where(id: @inbox.pluck(:id)).update_all(new: false) %>

View file

@ -0,0 +1,8 @@
= turbo_stream.append "entries" do
- @inbox.each do |i|
= render "inbox/entry", i: i
= turbo_stream.update "paginator" do
- if @more_data_available
= button_to t("voc.load"), inbox_path(last_id: @inbox_last_id), class: "btn btn-light"

View file

@ -143,8 +143,7 @@ Rails.application.routes.draw do
get "/notifications(/:type)", to: "notifications#index", as: :notifications, defaults: { type: "new" }
get "/inbox", to: "inbox#show"
get "/inbox/:author", to: "inbox#show"
match "/inbox(/:author)", via: [:get, :post], to: "inbox#show", as: :inbox
get "/user/:username(/p/:page)", to: "user#show", defaults: { page: 1 }
get "/@:username(/p/:page)", to: "user#show", as: :user, defaults: { page: 1 }