From eac76f174f220bb40a6f78ab6ed798550937b8b0 Mon Sep 17 00:00:00 2001 From: lfarrell Date: Thu, 14 Dec 2023 15:37:19 -0500 Subject: [PATCH 1/2] Don't load all hierarchical items at once when expanding the tree --- .../hierarchy_and_online_contents.scss | 9 +++++++ ...nt_components_hierarchy_component.html.erb | 14 ++++++----- ...document_components_hierarchy_component.rb | 24 +++++++++++++++++-- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/app/assets/stylesheets/arclight/modules/hierarchy_and_online_contents.scss b/app/assets/stylesheets/arclight/modules/hierarchy_and_online_contents.scss index a860f1e53..090ea9091 100644 --- a/app/assets/stylesheets/arclight/modules/hierarchy_and_online_contents.scss +++ b/app/assets/stylesheets/arclight/modules/hierarchy_and_online_contents.scss @@ -26,6 +26,15 @@ $hierarchy-view-collapse-icon: url("data:image/svg+xml,= 0), src: hierarchy_path(limit: @maximum_left_gap, key: '-sidebar') %> - <%= tag.turbo_frame id: "al-hierarchy-#{@document.id}-right" do %> - + <% num_pages.each do |page| %> + <%= tag.turbo_frame id: "al-hierarchy-#{@document.id}-right", class: "al-hierarchy-more" do %> + + <% end %> <% end %> <% else %> <%# there aren't enough to bother paginating, so load them all at once %> diff --git a/app/components/arclight/document_components_hierarchy_component.rb b/app/components/arclight/document_components_hierarchy_component.rb index 7686356c6..7d7144909 100644 --- a/app/components/arclight/document_components_hierarchy_component.rb +++ b/app/components/arclight/document_components_hierarchy_component.rb @@ -4,8 +4,8 @@ module Arclight # Display a document's constituent components with appropriate lazy-loading # to keep the page load time reasonable. class DocumentComponentsHierarchyComponent < ViewComponent::Base - # rubocop:disable Metrics/ParameterLists - def initialize(document: nil, target_index: -1, minimum_pagination_size: 20, left_outer_window: 3, maximum_left_gap: 10, window: 10) + # rubocop:disable Metrics/ParameterLists + def initialize(document: nil, target_index: -1, minimum_pagination_size: 200, left_outer_window: 30, maximum_left_gap: 100, window: 100) super @document = document @@ -21,6 +21,26 @@ def paginate? @document.number_of_children > @minimum_pagination_size end + def num_pages + number_of_pages = (@document.number_of_children / @maximum_left_gap.to_f).round + (1..number_of_pages).to_a + end + + def get_offset(page) + page * @maximum_left_gap + end + + def more_text(page) + offset = get_offset(page) + last_item = offset + (@maximum_left_gap - 1) + + if page == num_pages.last + last_item = @document.number_of_children + end + + "#{offset + 1} to #{last_item}" + end + def hierarchy_path(**kwargs) helpers.hierarchy_solr_document_path(id: @document.id, hierarchy: true, nest_path: params[:nest_path], **kwargs) end From ce30f5935e6d659a893bb98b1dd16dac6c2b61fd Mon Sep 17 00:00:00 2001 From: lfarrell Date: Fri, 15 Dec 2023 09:55:05 -0500 Subject: [PATCH 2/2] Display expand buttons one at a time --- .../hierarchy_and_online_contents.scss | 9 ++---- ...nt_components_hierarchy_component.html.erb | 28 +++++++++++++++++-- ...document_components_hierarchy_component.rb | 11 -------- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/app/assets/stylesheets/arclight/modules/hierarchy_and_online_contents.scss b/app/assets/stylesheets/arclight/modules/hierarchy_and_online_contents.scss index 090ea9091..faddd9310 100644 --- a/app/assets/stylesheets/arclight/modules/hierarchy_and_online_contents.scss +++ b/app/assets/stylesheets/arclight/modules/hierarchy_and_online_contents.scss @@ -26,19 +26,14 @@ $hierarchy-view-collapse-icon: url("data:image/svg+xml,= 0), src: hierarchy_path(limit: @maximum_left_gap, key: '-sidebar') %> +
<% num_pages.each do |page| %> - <%= tag.turbo_frame id: "al-hierarchy-#{@document.id}-right", class: "al-hierarchy-more" do %> -
    + <% hidden = 'd-none' unless page == 1 %> + <%= tag.turbo_frame class:"#{hidden}", id: "al-hierarchy-#{@document.id}-#{page}-right" do %> +
    • - <%= link_to "\"#{@document.normalized_title.truncate(25, seperator: ' ')}\" Items #{more_text(page)}", hierarchy_path(offset: get_offset(page), limit: @maximum_left_gap, key: '-right'), class: 'btn btn-secondary btn-sm' %> + <%= link_to t('arclight.views.show.expand'), hierarchy_path(offset: get_offset(page), limit: @maximum_left_gap, key: "-#{page}-right"), + id: "al-hierarchy-#{@document.id}-#{page}-more", class: 'btn btn-secondary btn-sm' %>
    <% end %> <% end %> +
<% else %> <%# there aren't enough to bother paginating, so load them all at once %> <%= helpers.turbo_frame_tag "al-hierarchy-#{@document.id}-sidebar", loading: ('lazy' unless @target_index >= 0), src: hierarchy_path(key: '-sidebar') %> <% end %> + diff --git a/app/components/arclight/document_components_hierarchy_component.rb b/app/components/arclight/document_components_hierarchy_component.rb index 7d7144909..edf80c3b6 100644 --- a/app/components/arclight/document_components_hierarchy_component.rb +++ b/app/components/arclight/document_components_hierarchy_component.rb @@ -30,17 +30,6 @@ def get_offset(page) page * @maximum_left_gap end - def more_text(page) - offset = get_offset(page) - last_item = offset + (@maximum_left_gap - 1) - - if page == num_pages.last - last_item = @document.number_of_children - end - - "#{offset + 1} to #{last_item}" - end - def hierarchy_path(**kwargs) helpers.hierarchy_solr_document_path(id: @document.id, hierarchy: true, nest_path: params[:nest_path], **kwargs) end