mirror of
https://github.com/docusealco/docuseal
synced 2026-11-06 06:52:33 -05:00
add infinite scroll
This commit is contained in:
1 parent
d3cc2e1ca8
commit
8cb0a7a020
21 files changed
+179
-10
No files matched your search
@@ -13,7 +13,7 @@ class ApplicationController < ActionController::Base
|
||||
before_action :maybe_redirect_to_setup, unless: :signed_in?
|
||||
before_action :authenticate_user!, unless: :devise_controller?
|
||||
|
||||
before_action :set_csp, if: -> { request.get? && !request.headers['HTTP_X_TURBO'] }
|
||||
before_action :set_csp, if: -> { request.get? && !request.headers['HTTP_X_TURBO'] && !turbo_infinite_scroll? }
|
||||
|
||||
helper_method :button_title,
|
||||
:current_account,
|
||||
@@ -65,6 +65,10 @@ class ApplicationController < ActionController::Base
|
||||
|
||||
private
|
||||
|
||||
def turbo_infinite_scroll?
|
||||
request.headers['HTTP_X_TURBO_INFINITE_SCROLL'].present?
|
||||
end
|
||||
|
||||
def turbo_native_ios?
|
||||
request.user_agent.to_s.include?('Hotwire Native iOS')
|
||||
end
|
||||
|
||||
@@ -29,5 +29,17 @@ class SubmissionsArchivedController < ApplicationController
|
||||
|
||||
ActiveRecord::Associations::Preloader.new(records: @submissions.filter_map(&:template),
|
||||
associations: :author).call
|
||||
|
||||
render_infinite_scroll(@pagy, @submissions) if turbo_infinite_scroll?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def render_infinite_scroll(pagy, submissions)
|
||||
render turbo_stream: [
|
||||
turbo_stream.before('infinite_scroll', partial: 'templates/submission', collection: submissions,
|
||||
locals: { with_template: true, archived: true }),
|
||||
turbo_stream.replace('infinite_scroll', partial: 'shared/infinite_scroll', locals: { pagy: })
|
||||
]
|
||||
end
|
||||
end
|
||||
@@ -30,5 +30,17 @@ class SubmissionsDashboardController < ApplicationController
|
||||
|
||||
ActiveRecord::Associations::Preloader.new(records: @submissions.filter_map(&:template),
|
||||
associations: :author).call
|
||||
|
||||
render_infinite_scroll(@pagy, @submissions) if turbo_infinite_scroll?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def render_infinite_scroll(pagy, submissions)
|
||||
render turbo_stream: [
|
||||
turbo_stream.before('infinite_scroll', partial: 'templates/submission', collection: submissions,
|
||||
locals: { with_template: true }),
|
||||
turbo_stream.replace('infinite_scroll', partial: 'shared/infinite_scroll', locals: { pagy: })
|
||||
]
|
||||
end
|
||||
end
|
||||
@@ -13,10 +13,7 @@ class TemplateFoldersController < ApplicationController
|
||||
.where(folder: [@template_folder, *(params[:q].present? ? @template_folder.subfolders : [])])
|
||||
.preload(:author, :template_accesses)
|
||||
|
||||
@template_folders =
|
||||
@template_folder.subfolders.where(id: Template.accessible_by(current_ability).active.select(:folder_id))
|
||||
|
||||
@template_folders = TemplateFolders.search(@template_folders, params[:q])
|
||||
@template_folders = filter_folders(@template_folder)
|
||||
@template_folders = TemplateFolders.sort(@template_folders, current_user, selected_order)
|
||||
|
||||
if @templates.exists?
|
||||
@@ -40,6 +37,8 @@ class TemplateFoldersController < ApplicationController
|
||||
|
||||
@templates = @templates.none
|
||||
end
|
||||
|
||||
render_infinite_scroll(@pagy, @templates, @template_folders) if turbo_infinite_scroll?
|
||||
end
|
||||
|
||||
def edit; end
|
||||
@@ -55,6 +54,27 @@ class TemplateFoldersController < ApplicationController
|
||||
|
||||
private
|
||||
|
||||
def filter_folders(template_folder)
|
||||
template_folders =
|
||||
template_folder.subfolders.where(id: Template.accessible_by(current_ability).active.select(:folder_id))
|
||||
|
||||
TemplateFolders.search(template_folders, params[:q])
|
||||
end
|
||||
|
||||
def render_infinite_scroll(pagy, templates, template_folders)
|
||||
rendering =
|
||||
if templates.present?
|
||||
{ partial: 'templates/template', collection: templates }
|
||||
else
|
||||
{ partial: 'template_folders/folder', collection: template_folders, as: :folder }
|
||||
end
|
||||
|
||||
render turbo_stream: [
|
||||
turbo_stream.before('infinite_scroll', **rendering),
|
||||
turbo_stream.replace('infinite_scroll', partial: 'shared/infinite_scroll', locals: { pagy: })
|
||||
]
|
||||
end
|
||||
|
||||
def selected_order
|
||||
@selected_order ||=
|
||||
if can?(:manage, :countless)
|
||||
|
||||
@@ -12,13 +12,23 @@ class TemplatesArchivedController < ApplicationController
|
||||
|
||||
@pagy, @templates = pagy_auto(@templates.select_for_list, limit: 12)
|
||||
|
||||
return unless params[:q].present? && @templates.blank?
|
||||
if params[:q].present? && @templates.blank?
|
||||
@related_submissions_pagy, @related_submissions = load_related_submissions
|
||||
end
|
||||
|
||||
@related_submissions_pagy, @related_submissions = load_related_submissions
|
||||
render_infinite_scroll(@pagy, @templates) if turbo_infinite_scroll?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def render_infinite_scroll(pagy, templates)
|
||||
render turbo_stream: [
|
||||
turbo_stream.before('infinite_scroll', partial: 'templates/template', collection: templates,
|
||||
locals: { with_folder: true }),
|
||||
turbo_stream.replace('infinite_scroll', partial: 'shared/infinite_scroll', locals: { pagy: })
|
||||
]
|
||||
end
|
||||
|
||||
def load_related_submissions
|
||||
related_submissions =
|
||||
Submission.accessible_by(current_ability)
|
||||
|
||||
@@ -16,7 +16,19 @@ class TemplatesArchivedSubmissionsController < ApplicationController
|
||||
end
|
||||
|
||||
@pagy, @submissions = pagy_auto(@submissions.select_for_list.preload(submitters: :start_form_submission_events))
|
||||
|
||||
render_infinite_scroll(@pagy, @submissions, @template) if turbo_infinite_scroll?
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
redirect_to root_path
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def render_infinite_scroll(pagy, submissions, template)
|
||||
render turbo_stream: [
|
||||
turbo_stream.before('infinite_scroll', partial: 'templates/submission', collection: submissions,
|
||||
locals: { template:, archived: true }),
|
||||
turbo_stream.replace('infinite_scroll', partial: 'shared/infinite_scroll', locals: { pagy: })
|
||||
]
|
||||
end
|
||||
end
|
||||
@@ -21,6 +21,8 @@ class TemplatesController < ApplicationController
|
||||
|
||||
@pagy, @submissions =
|
||||
pagy_auto(submissions.select_for_list.preload(:template_accesses, submitters: :start_form_submission_events))
|
||||
|
||||
render_infinite_scroll(@pagy, @submissions, @template) if turbo_infinite_scroll?
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
redirect_to root_path
|
||||
end
|
||||
@@ -86,6 +88,14 @@ class TemplatesController < ApplicationController
|
||||
|
||||
private
|
||||
|
||||
def render_infinite_scroll(pagy, submissions, template)
|
||||
render turbo_stream: [
|
||||
turbo_stream.before('infinite_scroll', partial: 'templates/submission', collection: submissions,
|
||||
locals: { template:, archived: template.archived_at? }),
|
||||
turbo_stream.replace('infinite_scroll', partial: 'shared/infinite_scroll', locals: { pagy: })
|
||||
]
|
||||
end
|
||||
|
||||
def template_params
|
||||
params.require(:template).permit(
|
||||
:name,
|
||||
|
||||
@@ -43,10 +43,26 @@ class TemplatesDashboardController < ApplicationController
|
||||
@related_submissions_pagy, @related_submissions = load_related_submissions
|
||||
end
|
||||
end
|
||||
|
||||
render_infinite_scroll(@pagy, @templates, @template_folders) if turbo_infinite_scroll?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def render_infinite_scroll(pagy, templates, template_folders)
|
||||
rendering =
|
||||
if templates.present?
|
||||
{ partial: 'templates/template', collection: templates }
|
||||
else
|
||||
{ partial: 'template_folders/folder', collection: template_folders, as: :folder }
|
||||
end
|
||||
|
||||
render turbo_stream: [
|
||||
turbo_stream.before('infinite_scroll', **rendering),
|
||||
turbo_stream.replace('infinite_scroll', partial: 'shared/infinite_scroll', locals: { pagy: })
|
||||
]
|
||||
end
|
||||
|
||||
def load_templates(templates, folders_count, show_shared_inline: false)
|
||||
templates = templates.preload(:author, :template_accesses)
|
||||
|
||||
|
||||
@@ -19,13 +19,22 @@ class TemplatesSharedController < ApplicationController
|
||||
|
||||
@pagy, @templates = pagy_auto(@templates.select_for_list, limit: 12)
|
||||
|
||||
return unless params[:q].present? && @templates.blank?
|
||||
if params[:q].present? && @templates.blank?
|
||||
@related_submissions_pagy, @related_submissions = load_related_submissions(is_archived: @is_archived)
|
||||
end
|
||||
|
||||
@related_submissions_pagy, @related_submissions = load_related_submissions(is_archived: @is_archived)
|
||||
render_infinite_scroll(@pagy, @templates) if turbo_infinite_scroll?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def render_infinite_scroll(pagy, templates)
|
||||
render turbo_stream: [
|
||||
turbo_stream.before('infinite_scroll', partial: 'templates/template', collection: templates),
|
||||
turbo_stream.replace('infinite_scroll', partial: 'shared/infinite_scroll', locals: { pagy: })
|
||||
]
|
||||
end
|
||||
|
||||
def load_related_submissions(is_archived:)
|
||||
shared_templates = Templates.shared(current_user)
|
||||
shared_templates = is_archived ? shared_templates.archived : shared_templates.active
|
||||
|
||||
Reference in new issue
Block a user