From ee77210e81930e5fbe498cd31ee4a0b8a1794299 Mon Sep 17 00:00:00 2001 From: "Nihal M. Kelanthodika" Date: Fri, 28 Jan 2022 19:37:35 +0530 Subject: [PATCH 1/5] Eager load taggings in SubscriptionsController#Index --- app/controllers/admin/subscriptions_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/admin/subscriptions_controller.rb b/app/controllers/admin/subscriptions_controller.rb index 315a1a3c8b..27ef2de2f5 100644 --- a/app/controllers/admin/subscriptions_controller.rb +++ b/app/controllers/admin/subscriptions_controller.rb @@ -17,7 +17,7 @@ module Admin format.html do if view_context.subscriptions_setup_complete?(@shops) @order_cycles = OrderCycle.joins(:schedules).managed_by(spree_current_user) - @payment_methods = Spree::PaymentMethod.managed_by(spree_current_user) + @payment_methods = Spree::PaymentMethod.managed_by(spree_current_user).includes(:taggings) @shipping_methods = Spree::ShippingMethod.managed_by(spree_current_user) else @shop = @shops.first From f0d6cd1f593f17d6131f614358f8d0385201ba21 Mon Sep 17 00:00:00 2001 From: "Nihal M. Kelanthodika" Date: Mon, 31 Jan 2022 22:36:10 +0530 Subject: [PATCH 2/5] Query payment_method_tags by id --- .../admin/subscriptions_controller.rb | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/app/controllers/admin/subscriptions_controller.rb b/app/controllers/admin/subscriptions_controller.rb index 27ef2de2f5..a3b1e3176b 100644 --- a/app/controllers/admin/subscriptions_controller.rb +++ b/app/controllers/admin/subscriptions_controller.rb @@ -24,7 +24,7 @@ module Admin render :setup_explanation end end - format.json { render_as_json @collection, ams_prefix: params[:ams_prefix] } + format.json { render_as_json @collection, ams_prefix: params[:ams_prefix], payment_method_tags: payment_method_tags_by_id } end end @@ -165,5 +165,21 @@ module Admin @subscription_params ||= PermittedAttributes::Subscription.new(params).call. to_h.with_indifferent_access end + + def payment_method_tags_by_id + payment_method_tags = ::ActsAsTaggableOn::Tag. + joins(:taggings). + includes(:taggings). + where(taggings: { taggable_type: "Spree::PaymentMethod", + taggable_id: Spree::PaymentMethod.from(Enterprise.managed_by(spree_current_user). + select('enterprises.id').find_by_id(params[:enterprise_id])), + context: 'tags' }) + + payment_method_tags.each_with_object({}) do |tag, hash| + payment_method_id = tag.taggings.first.taggable_id + hash[payment_method_id] ||= [] + hash[payment_method_id] << tag.name + end + end end end From 3152fef2ef8206edc99407077e1f391dff215432 Mon Sep 17 00:00:00 2001 From: "Nihal M. Kelanthodika" Date: Mon, 31 Jan 2022 22:41:35 +0530 Subject: [PATCH 3/5] Eager load distributors and cached_incoming_exchanges --- app/controllers/admin/subscriptions_controller.rb | 4 ++-- package.json | 8 ++++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/controllers/admin/subscriptions_controller.rb b/app/controllers/admin/subscriptions_controller.rb index a3b1e3176b..22c7d9a161 100644 --- a/app/controllers/admin/subscriptions_controller.rb +++ b/app/controllers/admin/subscriptions_controller.rb @@ -16,7 +16,7 @@ module Admin respond_to do |format| format.html do if view_context.subscriptions_setup_complete?(@shops) - @order_cycles = OrderCycle.joins(:schedules).managed_by(spree_current_user) + @order_cycles = OrderCycle.joins(:schedules).managed_by(spree_current_user).includes([:distributors, :cached_incoming_exchanges]) @payment_methods = Spree::PaymentMethod.managed_by(spree_current_user).includes(:taggings) @shipping_methods = Spree::ShippingMethod.managed_by(spree_current_user) else @@ -172,7 +172,7 @@ module Admin includes(:taggings). where(taggings: { taggable_type: "Spree::PaymentMethod", taggable_id: Spree::PaymentMethod.from(Enterprise.managed_by(spree_current_user). - select('enterprises.id').find_by_id(params[:enterprise_id])), + select('enterprises.id').find_by(id: params[:enterprise_id])), context: 'tags' }) payment_method_tags.each_with_object({}) do |tag, hash| diff --git a/package.json b/package.json index a0fcde890d..202bd5052c 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,12 @@ "storybook": "start-storybook" }, "jest": { - "testRegex": ["spec/javascripts/.*_test\\.js"], - "transformIgnorePatterns": ["/node_modules/(?!(stimulus)/)"] + "testRegex": [ + "spec/javascripts/.*_test\\.js" + ], + "transformIgnorePatterns": [ + "/node_modules/(?!(stimulus)/)" + ] }, "devDependencies": { "@storybook/addon-controls": "^6.4.13", From 37b5e1b014757eccfefd775a6784dda76c15ee79 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 8 Feb 2022 11:34:10 +0000 Subject: [PATCH 4/5] Allow Payment Method Serializers to receive options --- app/serializers/api/admin/payment_method_serializer.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/serializers/api/admin/payment_method_serializer.rb b/app/serializers/api/admin/payment_method_serializer.rb index 116504cfde..154f8e06ec 100644 --- a/app/serializers/api/admin/payment_method_serializer.rb +++ b/app/serializers/api/admin/payment_method_serializer.rb @@ -7,9 +7,9 @@ module Api def method_serializer if object.type == 'Spree::Gateway::StripeSCA' - Api::Admin::PaymentMethod::StripeSerializer.new(object) + Api::Admin::PaymentMethod::StripeSerializer.new(object, options) else - Api::Admin::PaymentMethod::BaseSerializer.new(object) + Api::Admin::PaymentMethod::BaseSerializer.new(object, options) end end end From 1c180299a5ea24db20387576b5f74ed4f7774258 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Tue, 8 Feb 2022 11:34:29 +0000 Subject: [PATCH 5/5] Pass indexed payment method tags to PaymentMethod Serializer --- app/controllers/admin/subscriptions_controller.rb | 1 + .../api/admin/payment_method/base_serializer.rb | 12 ++++++++++-- app/views/admin/subscriptions/_data.html.haml | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/controllers/admin/subscriptions_controller.rb b/app/controllers/admin/subscriptions_controller.rb index 22c7d9a161..dfc078f500 100644 --- a/app/controllers/admin/subscriptions_controller.rb +++ b/app/controllers/admin/subscriptions_controller.rb @@ -18,6 +18,7 @@ module Admin if view_context.subscriptions_setup_complete?(@shops) @order_cycles = OrderCycle.joins(:schedules).managed_by(spree_current_user).includes([:distributors, :cached_incoming_exchanges]) @payment_methods = Spree::PaymentMethod.managed_by(spree_current_user).includes(:taggings) + @payment_method_tags = payment_method_tags_by_id @shipping_methods = Spree::ShippingMethod.managed_by(spree_current_user) else @shop = @shops.first diff --git a/app/serializers/api/admin/payment_method/base_serializer.rb b/app/serializers/api/admin/payment_method/base_serializer.rb index d8cc35e8c9..c89d387406 100644 --- a/app/serializers/api/admin/payment_method/base_serializer.rb +++ b/app/serializers/api/admin/payment_method/base_serializer.rb @@ -7,11 +7,19 @@ module Api attributes :id, :name, :type, :tag_list, :tags def tag_list - object.tag_list.join(",") + payment_method_tag_list.join(",") end def tags - object.tag_list.map{ |t| { text: t } } + payment_method_tag_list.map{ |t| { text: t } } + end + + private + + def payment_method_tag_list + return object.tag_list unless options[:payment_method_tags] + + options.dig(:payment_method_tags, object.id) || [] end end end diff --git a/app/views/admin/subscriptions/_data.html.haml b/app/views/admin/subscriptions/_data.html.haml index 0cf4e3db35..c1d5ed411f 100644 --- a/app/views/admin/subscriptions/_data.html.haml +++ b/app/views/admin/subscriptions/_data.html.haml @@ -2,7 +2,7 @@ = admin_inject_json_ams_array "admin.subscriptions", "shops", @shops, Api::Admin::IdNameSerializer if @shops = admin_inject_json_ams_array "admin.subscriptions", "customers", @customers, Api::Admin::IdEmailSerializer if @customers = admin_inject_json_ams_array "admin.subscriptions", "schedules", @schedules, Api::Admin::IdNameSerializer if @schedules -= admin_inject_json_ams_array "admin.subscriptions", "paymentMethods", @payment_methods, Api::Admin::PaymentMethodSerializer if @payment_methods += admin_inject_json_ams_array "admin.subscriptions", "paymentMethods", @payment_methods, Api::Admin::PaymentMethodSerializer, { payment_method_tags: @payment_method_tags } if @payment_methods = admin_inject_json_ams_array "admin.subscriptions", "shippingMethods", @shipping_methods, Api::Admin::IdNameSerializer if @shipping_methods = admin_inject_json_ams_array "admin.subscriptions", "orderCycles", @order_cycles, Api::Admin::BasicOrderCycleSerializer if @order_cycles = admin_inject_available_countries(module: "admin.subscriptions")