From e76b001348343bf35c001f085fca1bf94086de96 Mon Sep 17 00:00:00 2001 From: piyush828-design Date: Mon, 14 Apr 2025 16:29:43 +0530 Subject: [PATCH 1/4] Upgrade pagy version to latest --- Gemfile | 3 ++- Gemfile.lock | 6 +++--- app/views/admin/shared/_pagy_links.html.haml | 2 +- .../admin/shared/_stimulus_pagination.html.haml | 12 ++++++------ 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/Gemfile b/Gemfile index 5e048b5f66..291d8087b6 100644 --- a/Gemfile +++ b/Gemfile @@ -63,9 +63,10 @@ gem 'devise-token_authenticatable' gem 'jwt', '~> 2.3' gem 'oauth2', '~> 1.4.7' # Used for Stripe Connect +gem 'activesupport' gem 'datafoodconsortium-connector' gem 'jsonapi-serializer' -gem 'pagy', '~> 5.1' +gem 'pagy', '~> 8' gem 'rswag-api' gem 'rswag-ui' diff --git a/Gemfile.lock b/Gemfile.lock index d419f72057..93cf01fc12 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -495,8 +495,7 @@ GEM validate_url webfinger (~> 2.0) orm_adapter (0.5.0) - pagy (5.10.1) - activesupport + pagy (8.6.3) paper_trail (15.1.0) activerecord (>= 6.1) request_store (~> 1.4) @@ -870,6 +869,7 @@ DEPENDENCIES activerecord-import activerecord-postgresql-adapter activerecord-session_store + activesupport acts-as-taggable-on acts_as_list (= 1.0.4) angular-rails-templates (>= 0.3.0) @@ -940,7 +940,7 @@ DEPENDENCIES omniauth_openid_connect openid_connect order_management! - pagy (~> 5.1) + pagy (~> 8) paper_trail paranoia (~> 2.4) paypal-sdk-merchant (= 1.117.2) diff --git a/app/views/admin/shared/_pagy_links.html.haml b/app/views/admin/shared/_pagy_links.html.haml index 61603de222..cca6466686 100644 --- a/app/views/admin/shared/_pagy_links.html.haml +++ b/app/views/admin/shared/_pagy_links.html.haml @@ -1,4 +1,4 @@ -- link = pagy_link_proc(pagy) +- link = pagy_anchor(pagy) %nav.pagy_nav.pagination{"aria-label" => "pager", :role => "navigation"} - if pagy.prev diff --git a/app/views/admin/shared/_stimulus_pagination.html.haml b/app/views/admin/shared/_stimulus_pagination.html.haml index e7b4b9960a..ec73ecb92b 100644 --- a/app/views/admin/shared/_stimulus_pagination.html.haml +++ b/app/views/admin/shared/_stimulus_pagination.html.haml @@ -1,4 +1,4 @@ -- link = pagy_link_proc(pagy) +- link = pagy_anchor(pagy) .pagination{ "data-controller": "search" } - if pagy.prev @@ -6,9 +6,9 @@ - if feature?(:admin_style_v3, spree_current_user) %i.icon-chevron-left{ data: { action: 'click->search#changePage', page: pagy.prev } } - else - != pagy_t('pagy.nav.prev') + != pagy_t('pagy.prev') - else - %button.page.disabled{disabled: "disabled"}!= pagy_t('pagy.nav.prev') + %button.page.disabled{disabled: "disabled"}!= pagy_t('pagy.prev') - pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36] - if item.is_a?(Integer) # page link @@ -18,13 +18,13 @@ %button.page.current.active= item - elsif item == :gap # page gap - %span.page.gap.pagination-ellipsis!= pagy_t('pagy.nav.gap') + %span.page.gap.pagination-ellipsis!= pagy_t('pagy.gap') - if pagy.next %button.page.next{ data: { action: 'click->search#changePage', page: pagy.next } } - if feature?(:admin_style_v3, spree_current_user) %i.icon-chevron-right{ data: { action: 'click->search#changePage', page: pagy.next } } - else - != pagy_t('pagy.nav.next') + != pagy_t('pagy.next') - else - %button.page.disabled.pagination-next{disabled: "disabled"}!= pagy_t('pagy.nav.next') + %button.page.disabled.pagination-next{disabled: "disabled"}!= pagy_t('pagy.next') From da5cef26db812ec213a39aecdda6a67a071aeef6 Mon Sep 17 00:00:00 2001 From: piyush828-design Date: Wed, 16 Apr 2025 16:02:06 +0530 Subject: [PATCH 2/4] upgraded pagy to latest version --- Gemfile | 3 +-- Gemfile.lock | 5 ++--- app/controllers/api/v1/customers_controller.rb | 2 +- config/initializers/pagy.rb | 12 ++++++------ spec/requests/api/v1/customers_spec.rb | 2 +- 5 files changed, 11 insertions(+), 13 deletions(-) diff --git a/Gemfile b/Gemfile index 291d8087b6..3eb9efa049 100644 --- a/Gemfile +++ b/Gemfile @@ -63,10 +63,9 @@ gem 'devise-token_authenticatable' gem 'jwt', '~> 2.3' gem 'oauth2', '~> 1.4.7' # Used for Stripe Connect -gem 'activesupport' gem 'datafoodconsortium-connector' gem 'jsonapi-serializer' -gem 'pagy', '~> 8' +gem 'pagy', '~> 9' gem 'rswag-api' gem 'rswag-ui' diff --git a/Gemfile.lock b/Gemfile.lock index 93cf01fc12..01f026fc9c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -495,7 +495,7 @@ GEM validate_url webfinger (~> 2.0) orm_adapter (0.5.0) - pagy (8.6.3) + pagy (9.3.4) paper_trail (15.1.0) activerecord (>= 6.1) request_store (~> 1.4) @@ -869,7 +869,6 @@ DEPENDENCIES activerecord-import activerecord-postgresql-adapter activerecord-session_store - activesupport acts-as-taggable-on acts_as_list (= 1.0.4) angular-rails-templates (>= 0.3.0) @@ -940,7 +939,7 @@ DEPENDENCIES omniauth_openid_connect openid_connect order_management! - pagy (~> 8) + pagy (~> 9) paper_trail paranoia (~> 2.4) paypal-sdk-merchant (= 1.117.2) diff --git a/app/controllers/api/v1/customers_controller.rb b/app/controllers/api/v1/customers_controller.rb index 0fe756efc5..5353c6d39f 100644 --- a/app/controllers/api/v1/customers_controller.rb +++ b/app/controllers/api/v1/customers_controller.rb @@ -18,7 +18,7 @@ module Api end def index - @pagy, customers = pagy(search_customers, pagy_options) + @pagy, customers = pagy(search_customers, **pagy_options) render json: Api::V1::CustomerSerializer.new(customers, pagination_options) end diff --git a/config/initializers/pagy.rb b/config/initializers/pagy.rb index eab7d3a437..2aacb32007 100644 --- a/config/initializers/pagy.rb +++ b/config/initializers/pagy.rb @@ -2,18 +2,18 @@ require 'pagy/extras/arel' require 'pagy/extras/array' -require 'pagy/extras/items' +require 'pagy/extras/limit' require 'pagy/extras/overflow' # Pagy Variables # See https://ddnexus.github.io/pagy/api/pagy#variables -Pagy::DEFAULT[:items] = 100 +Pagy::DEFAULT[:limit] = 100 -# Items extra: Allow the client to request a custom number of items per page with an optional +# limit extra: Allow the client to request a custom number of limit per page with an optional # selector UI -# See https://ddnexus.github.io/pagy/extras/items -Pagy::DEFAULT[:items_param] = :per_page -Pagy::DEFAULT[:max_items] = 100 +# See https://ddnexus.github.io/pagy/extras/limit +Pagy::DEFAULT[:limit_param] = :per_page +Pagy::DEFAULT[:limit_max] = 100 # For handling requests for non-existant pages eg: page 35 when there are only 4 pages of results Pagy::DEFAULT[:overflow] = :empty_page diff --git a/spec/requests/api/v1/customers_spec.rb b/spec/requests/api/v1/customers_spec.rb index 9af5ad71d1..bc9e8308cc 100644 --- a/spec/requests/api/v1/customers_spec.rb +++ b/spec/requests/api/v1/customers_spec.rb @@ -133,7 +133,7 @@ RSpec.describe "Customers", type: :request, swagger_doc: "v1.yaml", feature: :ap it "informs about invalid pages" do get "/api/v1/customers", params: { page: "0" } expect(json_response_ids).to eq nil - expect(json_error_detail).to eq 'expected :page >= 1; got "0"' + expect(json_error_detail).to eq "expected :page >= 1; got 0" end end From 3202d0ea815323fdad8de16de7cc0f14cf09b4dd Mon Sep 17 00:00:00 2001 From: piyush828-design Date: Wed, 16 Apr 2025 17:45:39 +0530 Subject: [PATCH 3/4] fixed test failure --- app/controllers/admin/products_v3_controller.rb | 2 +- app/controllers/api/v0/exchange_products_controller.rb | 2 +- app/controllers/api/v0/orders_controller.rb | 2 +- app/controllers/api/v0/products_controller.rb | 2 +- app/controllers/spree/admin/orders_controller.rb | 2 +- app/controllers/spree/admin/users_controller.rb | 2 +- app/controllers/spree/admin/zones_controller.rb | 2 +- app/services/products_renderer.rb | 3 +-- app/views/admin/products_v3/_sort.html.haml | 2 +- config/initializers/pagy.rb | 1 + 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/app/controllers/admin/products_v3_controller.rb b/app/controllers/admin/products_v3_controller.rb index e06ff5ebb9..43da0a2c10 100644 --- a/app/controllers/admin/products_v3_controller.rb +++ b/app/controllers/admin/products_v3_controller.rb @@ -138,7 +138,7 @@ module Admin def fetch_products product_query = OpenFoodNetwork::Permissions.new(spree_current_user) .editable_products.merge(product_scope).ransack(ransack_query).result - @pagy, @products = pagy(product_query.order(:name), items: @per_page, page: @page, + @pagy, @products = pagy(product_query.order(:name), limit: @per_page, page: @page, size: [1, 2, 2, 1]) end diff --git a/app/controllers/api/v0/exchange_products_controller.rb b/app/controllers/api/v0/exchange_products_controller.rb index 8b16fdbdd4..25586088b2 100644 --- a/app/controllers/api/v0/exchange_products_controller.rb +++ b/app/controllers/api/v0/exchange_products_controller.rb @@ -77,7 +77,7 @@ module Api if pagination_required? @pagy, results = pagy(results, - items: params[:per_page] || DEFAULT_PER_PAGE) + limit: params[:per_page] || DEFAULT_PER_PAGE) end serialized_products = ActiveModel::ArraySerializer.new( diff --git a/app/controllers/api/v0/orders_controller.rb b/app/controllers/api/v0/orders_controller.rb index 2ffb4304b3..fd1938a85d 100644 --- a/app/controllers/api/v0/orders_controller.rb +++ b/app/controllers/api/v0/orders_controller.rb @@ -12,7 +12,7 @@ module Api if pagination_required? @pagy, orders = pagy(orders, - items: params[:per_page] || default_per_page) + limit: params[:per_page] || default_per_page) end render json: { diff --git a/app/controllers/api/v0/products_controller.rb b/app/controllers/api/v0/products_controller.rb index 801b6a343a..6f95e1e64e 100644 --- a/app/controllers/api/v0/products_controller.rb +++ b/app/controllers/api/v0/products_controller.rb @@ -78,7 +78,7 @@ module Api end def render_paged_products(products, product_serializer = ::Api::Admin::ProductSerializer) - @pagy, products = pagy(products, items: params[:per_page] || DEFAULT_PER_PAGE) + @pagy, products = pagy(products, limit: params[:per_page] || DEFAULT_PER_PAGE) serialized_products = ActiveModel::ArraySerializer.new( products, diff --git a/app/controllers/spree/admin/orders_controller.rb b/app/controllers/spree/admin/orders_controller.rb index 286929728d..c5f80d799c 100644 --- a/app/controllers/spree/admin/orders_controller.rb +++ b/app/controllers/spree/admin/orders_controller.rb @@ -17,7 +17,7 @@ module Spree def index orders = SearchOrders.new(search_params, spree_current_user).orders - @pagy, @orders = pagy(orders, items: params[:per_page] || 15) + @pagy, @orders = pagy(orders, limit: params[:per_page] || 15) update_search_results if searching? end diff --git a/app/controllers/spree/admin/users_controller.rb b/app/controllers/spree/admin/users_controller.rb index 00fd64e8a9..236bf66f96 100644 --- a/app/controllers/spree/admin/users_controller.rb +++ b/app/controllers/spree/admin/users_controller.rb @@ -60,7 +60,7 @@ module Spree limit(params[:limit] || 100) else @search = Spree::User.ransack(params[:q]) - @pagy, @collection = pagy(@search.result, items: Spree::Config[:admin_products_per_page]) + @pagy, @collection = pagy(@search.result, limit: Spree::Config[:admin_products_per_page]) @collection end end diff --git a/app/controllers/spree/admin/zones_controller.rb b/app/controllers/spree/admin/zones_controller.rb index 680f4d1a07..8af0181dc4 100644 --- a/app/controllers/spree/admin/zones_controller.rb +++ b/app/controllers/spree/admin/zones_controller.rb @@ -15,7 +15,7 @@ module Spree params[:q] ||= {} params[:q][:s] ||= "name asc" @search = super.ransack(params[:q]) - @pagy, @zones = pagy(@search.result, items: Spree::Config[:orders_per_page]) + @pagy, @zones = pagy(@search.result, limit: Spree::Config[:orders_per_page]) @zones end diff --git a/app/services/products_renderer.rb b/app/services/products_renderer.rb index 12ccbb19f8..d12d92ffde 100644 --- a/app/services/products_renderer.rb +++ b/app/services/products_renderer.rb @@ -39,7 +39,6 @@ class ProductsRenderer else distributed_products.products_relation end - results = filter(results) # Scope results with variant_overrides paginate(results).each { |product| product_scoper.scope(product) } @@ -100,7 +99,7 @@ class ProductsRenderer _pagy, paginated_results = pagy_array( results, page: args[:page] || 1, - items: args[:per_page] || DEFAULT_PER_PAGE + limit: args[:per_page] || DEFAULT_PER_PAGE ) paginated_results diff --git a/app/views/admin/products_v3/_sort.html.haml b/app/views/admin/products_v3/_sort.html.haml index 48e5637b45..17ae19e202 100644 --- a/app/views/admin/products_v3/_sort.html.haml +++ b/app/views/admin/products_v3/_sort.html.haml @@ -10,7 +10,7 @@ %form.with-dropdown = t(".pagination.per_page.show") = select_tag :per_page, - options_for_select([15, 25, 50, 100].collect{|i| [t('.pagination.per_page.per_page', num: i), i]}, pagy&.items), + options_for_select([15, 25, 50, 100].collect{|i| [t('.pagination.per_page.per_page', num: i), i]}, pagy&.limit), class: "no-input per-page", data: { controller: "tom-select search", action: "change->search#changePerPage", "tom-select-options-value": '{ "plugins": [] }'} diff --git a/config/initializers/pagy.rb b/config/initializers/pagy.rb index 2aacb32007..f3a7e13c62 100644 --- a/config/initializers/pagy.rb +++ b/config/initializers/pagy.rb @@ -4,6 +4,7 @@ require 'pagy/extras/arel' require 'pagy/extras/array' require 'pagy/extras/limit' require 'pagy/extras/overflow' +require 'pagy/extras/size' # Pagy Variables # See https://ddnexus.github.io/pagy/api/pagy#variables From 6f2f8e95429b331570fd2bb473e9752edb1e6f2a Mon Sep 17 00:00:00 2001 From: piyush828-design Date: Thu, 24 Apr 2025 12:49:47 +0530 Subject: [PATCH 4/4] fixed users page breaking --- app/views/admin/shared/_pagy_links.html.haml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/views/admin/shared/_pagy_links.html.haml b/app/views/admin/shared/_pagy_links.html.haml index cca6466686..7fe5f9740f 100644 --- a/app/views/admin/shared/_pagy_links.html.haml +++ b/app/views/admin/shared/_pagy_links.html.haml @@ -2,7 +2,7 @@ %nav.pagy_nav.pagination{"aria-label" => "pager", :role => "navigation"} - if pagy.prev - %span.page.prev!= link.call(pagy.prev, t(:previous), 'aria-label="previous"') + %span.page.prev!= link.call(pagy.prev, t(:previous)) - else %span.page.prev.disabled!= t(:previous) - pagy.series.each do |item| # series example: [1, :gap, 7, 8, "9", 10, 11, :gap, 36] @@ -14,6 +14,6 @@ - elsif item == :gap # page gap %span.page.gap … - if pagy.next - %span.page.next!= link.call(pagy.next, t(:next), 'aria-label="next"') + %span.page.next!= link.call(pagy.next, t(:next)) - else %span.page.next.disabled!= t(:next)