spree_admin 5.2.0.rc2 → 5.2.0.rc3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/spree/admin/components/_alerts.scss +1 -1
  3. data/app/assets/stylesheets/spree/admin/components/_buttons.scss +5 -4
  4. data/app/assets/stylesheets/spree/admin/components/_dialogs.scss +0 -1
  5. data/app/assets/stylesheets/spree/admin/components/_dropdowns.scss +4 -0
  6. data/app/assets/stylesheets/spree/admin/components/_main.scss +7 -7
  7. data/app/assets/stylesheets/spree/admin/components/_tables.scss +2 -2
  8. data/app/assets/stylesheets/spree/admin/components/_variants_form.scss +1 -2
  9. data/app/assets/stylesheets/spree/admin/global/_variables.scss +14 -12
  10. data/app/assets/stylesheets/spree/admin/shared/_base.scss +2 -2
  11. data/app/assets/stylesheets/spree/admin/shared/_forms.scss +5 -6
  12. data/app/controllers/spree/admin/admin_users_controller.rb +0 -2
  13. data/app/controllers/spree/admin/checkouts_controller.rb +1 -4
  14. data/app/controllers/spree/admin/coupon_codes_controller.rb +0 -14
  15. data/app/controllers/spree/admin/customer_returns_controller.rb +0 -13
  16. data/app/controllers/spree/admin/digital_assets_controller.rb +2 -2
  17. data/app/controllers/spree/admin/exports_controller.rb +2 -9
  18. data/app/controllers/spree/admin/gift_cards_controller.rb +7 -14
  19. data/app/controllers/spree/admin/invitations_controller.rb +0 -2
  20. data/app/controllers/spree/admin/oauth_applications_controller.rb +0 -10
  21. data/app/controllers/spree/admin/option_types_controller.rb +0 -10
  22. data/app/controllers/spree/admin/orders_controller.rb +1 -1
  23. data/app/controllers/spree/admin/pages_controller.rb +1 -1
  24. data/app/controllers/spree/admin/payment_methods_controller.rb +0 -10
  25. data/app/controllers/spree/admin/policies_controller.rb +4 -0
  26. data/app/controllers/spree/admin/posts_controller.rb +2 -10
  27. data/app/controllers/spree/admin/properties_controller.rb +0 -12
  28. data/app/controllers/spree/admin/resource_controller.rb +27 -17
  29. data/app/controllers/spree/admin/return_authorizations_controller.rb +0 -10
  30. data/app/controllers/spree/admin/shipping_methods_controller.rb +4 -0
  31. data/app/controllers/spree/admin/stock_items_controller.rb +8 -11
  32. data/app/controllers/spree/admin/stock_locations_controller.rb +1 -1
  33. data/app/controllers/spree/admin/stock_transfers_controller.rb +0 -10
  34. data/app/controllers/spree/admin/store_credits_controller.rb +35 -35
  35. data/app/controllers/spree/admin/taxonomies_controller.rb +0 -10
  36. data/app/controllers/spree/admin/themes_controller.rb +6 -2
  37. data/app/controllers/spree/admin/users_controller.rb +7 -17
  38. data/app/controllers/spree/admin/webhooks_subscribers_controller.rb +0 -10
  39. data/app/controllers/spree/admin/zones_controller.rb +0 -7
  40. data/app/helpers/spree/admin/dropdown_helper.rb +18 -16
  41. data/app/helpers/spree/admin/navigation_helper.rb +1 -1
  42. data/app/helpers/spree/admin/orders_filters_helper.rb +2 -0
  43. data/app/models/spree/admin/form_builder.rb +13 -12
  44. data/app/views/spree/admin/custom_domains/_custom_domains.html.erb +1 -1
  45. data/app/views/spree/admin/digital_assets/_table.html.erb +1 -1
  46. data/app/views/spree/admin/gift_cards/_filters.html.erb +2 -1
  47. data/app/views/spree/admin/integrations/index.html.erb +20 -8
  48. data/app/views/spree/admin/invitations/new.html.erb +2 -1
  49. data/app/views/spree/admin/metafield_definitions/_filters.html.erb +1 -1
  50. data/app/views/spree/admin/newsletter_subscribers/_filters.html.erb +1 -1
  51. data/app/views/spree/admin/newsletter_subscribers/_table_header.html.erb +2 -2
  52. data/app/views/spree/admin/oauth_applications/_table_header.html.erb +1 -1
  53. data/app/views/spree/admin/orders/_customer.html.erb +1 -1
  54. data/app/views/spree/admin/orders/_filters.html.erb +4 -5
  55. data/app/views/spree/admin/orders/_header.html.erb +0 -5
  56. data/app/views/spree/admin/orders/_list.html.erb +3 -3
  57. data/app/views/spree/admin/page_blocks/edit.html.erb +3 -3
  58. data/app/views/spree/admin/page_builder/_add_block.html.erb +1 -1
  59. data/app/views/spree/admin/page_builder/_header.html.erb +1 -1
  60. data/app/views/spree/admin/page_builder/_pages_dropdown.html.erb +2 -2
  61. data/app/views/spree/admin/page_builder/_sidebar_block.html.erb +1 -1
  62. data/app/views/spree/admin/page_builder/_sidebar_colors.html.erb +2 -2
  63. data/app/views/spree/admin/page_builder/_sidebar_fonts.html.erb +3 -3
  64. data/app/views/spree/admin/page_builder/_sidebar_section.html.erb +1 -1
  65. data/app/views/spree/admin/page_links/_list.html.erb +1 -1
  66. data/app/views/spree/admin/page_links/edit.html.erb +1 -1
  67. data/app/views/spree/admin/page_sections/edit.html.erb +3 -3
  68. data/app/views/spree/admin/page_sections/new.html.erb +1 -1
  69. data/app/views/spree/admin/pages/_table_header.html.erb +3 -3
  70. data/app/views/spree/admin/payment_methods/index.html.erb +5 -1
  71. data/app/views/spree/admin/policies/_filters.html.erb +1 -1
  72. data/app/views/spree/admin/products/_bulk_operations.html.erb +2 -2
  73. data/app/views/spree/admin/products/edit.html.erb +0 -2
  74. data/app/views/spree/admin/products/form/_status.html.erb +0 -3
  75. data/app/views/spree/admin/products/form/_variants.html.erb +1 -1
  76. data/app/views/spree/admin/promotions/_table_header.html.erb +1 -1
  77. data/app/views/spree/admin/promotions/form/_kind.html.erb +4 -4
  78. data/app/views/spree/admin/refund_reasons/_table_header.html.erb +1 -1
  79. data/app/views/spree/admin/reimbursement_types/_table_header.html.erb +1 -1
  80. data/app/views/spree/admin/return_authorization_reasons/_table_header.html.erb +1 -1
  81. data/app/views/spree/admin/roles/index.html.erb +1 -1
  82. data/app/views/spree/admin/shared/_calendar_range_picker.html.erb +2 -2
  83. data/app/views/spree/admin/shared/_content_header.html.erb +4 -1
  84. data/app/views/spree/admin/shared/_index_table.html.erb +5 -4
  85. data/app/views/spree/admin/shared/_index_table_options.html.erb +1 -1
  86. data/app/views/spree/admin/shared/_new_item_dropdown.html.erb +1 -1
  87. data/app/views/spree/admin/shared/_user_dropdown.html.erb +4 -3
  88. data/app/views/spree/admin/shared/sidebar/_store_dropdown.html.erb +1 -1
  89. data/app/views/spree/admin/shipping_categories/_table_header.html.erb +1 -1
  90. data/app/views/spree/admin/shipping_methods/_table_header.html.erb +1 -1
  91. data/app/views/spree/admin/stock_locations/_table_header.html.erb +2 -2
  92. data/app/views/spree/admin/store_credit_categories/index.html.erb +1 -1
  93. data/app/views/spree/admin/store_credits/_list.html.erb +3 -3
  94. data/app/views/spree/admin/stores/form/_checkout.html.erb +2 -2
  95. data/app/views/spree/admin/stores/form/_checkout_links.html.erb +1 -1
  96. data/app/views/spree/admin/tax_categories/_table_header.html.erb +2 -2
  97. data/app/views/spree/admin/tax_rates/_table_header.html.erb +2 -2
  98. data/app/views/spree/admin/taxonomies/_table_header.html.erb +1 -1
  99. data/app/views/spree/admin/users/_filters.html.erb +4 -5
  100. data/app/views/spree/admin/users/index.html.erb +1 -1
  101. data/config/locales/en.yml +2 -0
  102. data/lib/generators/spree/admin/scaffold/templates/views/_filters.html.erb.tt +1 -1
  103. data/lib/generators/spree/admin/scaffold/templates/views/_table_header.html.erb.tt +2 -2
  104. metadata +8 -8
@@ -11,18 +11,15 @@ module Spree
11
11
  true
12
12
  end
13
13
 
14
- def collection
15
- params[:q] ||= {}
16
- params[:q][:s] ||= 'created_at desc'
14
+ def scope
15
+ super.joins(:variant).where(spree_variants: { track_inventory: true }).merge(current_store.variants.eligible).reorder('')
16
+ end
17
17
 
18
- @search = super.accessible_by(current_ability, :update).ransack(params[:q])
19
- @stock_items = @search.result.
20
- joins(:variant).
21
- where(spree_variants: { track_inventory: true }).
22
- merge(current_store.variants.eligible).
23
- includes(:stock_location, [variant: [product: [variants: [:images], master: [:images]], images: []]]).
24
- page(params[:page]).
25
- per(params[:per_page])
18
+ def collection_includes
19
+ {
20
+ stock_location: [],
21
+ variant: [option_values: :option_type, product: [variant_images: [], variants: [:images], master: [:images]], images: []]
22
+ }
26
23
  end
27
24
 
28
25
  def add_breadcrumbs
@@ -15,7 +15,7 @@ module Spree
15
15
 
16
16
  private
17
17
 
18
- def collection
18
+ def scope
19
19
  super.order_default
20
20
  end
21
21
 
@@ -15,16 +15,6 @@ module Spree
15
15
  spree.admin_stock_transfer_path(@object)
16
16
  end
17
17
 
18
- def collection
19
- params[:q] ||= {}
20
- params[:q][:s] ||= 'created_at desc'
21
-
22
- @search = super.accessible_by(current_ability, :index).ransack(params[:q])
23
- @stock_transfers = @search.result.
24
- page(params[:page]).
25
- per(params[:per_page])
26
- end
27
-
28
18
  def permitted_resource_params
29
19
  params.require(:stock_transfer).permit(permitted_stock_transfer_attributes)
30
20
  end
@@ -2,18 +2,10 @@ module Spree
2
2
  module Admin
3
3
  class StoreCreditError < StandardError; end
4
4
 
5
- class StoreCreditsController < Spree::Admin::BaseController
6
- before_action :load_user
7
- before_action :load_store_credit, only: [:new, :edit, :update, :destroy]
5
+ class StoreCreditsController < Spree::Admin::ResourceController
6
+ before_action :set_breadcrumbs
7
+ before_action :set_user
8
8
  before_action :ensure_unused_store_credit, only: [:update]
9
- helper_method :collection_url
10
-
11
- def index
12
- @store_credits = scope.includes(:created_by).order(created_at: :desc)
13
- @store_credits = @store_credits.page(params[:page]).per(params[:per_page])
14
-
15
- @collection = @store_credits
16
- end
17
9
 
18
10
  def show
19
11
  @store_credit = scope.find(params[:id])
@@ -21,8 +13,8 @@ module Spree
21
13
  end
22
14
 
23
15
  def create
24
- @store_credit = @user.store_credits.build(
25
- permitted_store_credit_params.merge(
16
+ @store_credit = parent.store_credits.build(
17
+ permitted_resource_params.merge(
26
18
  created_by: try_spree_current_user,
27
19
  action_originator: try_spree_current_user,
28
20
  store: current_store
@@ -31,7 +23,7 @@ module Spree
31
23
 
32
24
  if @store_credit.save
33
25
  flash[:success] = flash_message_for(@store_credit, :successfully_created)
34
- redirect_to spree.admin_user_path(@user)
26
+ redirect_to spree.admin_user_path(parent)
35
27
  else
36
28
  flash[:error] = Spree.t('store_credit.errors.unable_to_create')
37
29
  render :new, status: :unprocessable_entity
@@ -39,11 +31,11 @@ module Spree
39
31
  end
40
32
 
41
33
  def update
42
- @store_credit.assign_attributes(permitted_store_credit_params)
34
+ @store_credit.assign_attributes(permitted_resource_params)
43
35
 
44
36
  if @store_credit.save
45
37
  flash[:success] = flash_message_for(@store_credit, :successfully_updated)
46
- redirect_to spree.admin_user_store_credit_path(@user, @store_credit)
38
+ redirect_to spree.admin_user_store_credit_path(parent, @store_credit)
47
39
  else
48
40
  flash[:error] = Spree.t('store_credit.errors.unable_to_update')
49
41
  render :edit, status: :unprocessable_entity
@@ -59,37 +51,41 @@ module Spree
59
51
  flash[:error] = Spree.t('store_credit.errors.unable_to_delete')
60
52
  end
61
53
 
62
- redirect_to spree.admin_user_path(@user)
54
+ redirect_to spree.admin_user_path(parent)
63
55
  end
64
56
 
65
57
  protected
66
58
 
67
- def permitted_store_credit_params
68
- params.require(:store_credit).permit(permitted_store_credit_attributes)
59
+ def parent
60
+ @parent ||= Spree.user_class.find_by(id: params[:user_id])
69
61
  end
70
62
 
71
- private
63
+ def parent_data
64
+ {
65
+ model_name: 'spree/user',
66
+ model_class: Spree.user_class,
67
+ find_by: :id
68
+ }
69
+ end
72
70
 
73
- def load_user
74
- @user = Spree.user_class.find_by(id: params[:user_id])
71
+ def permitted_resource_params
72
+ params.require(:store_credit).permit(permitted_store_credit_attributes)
73
+ end
75
74
 
76
- unless @user
77
- flash[:error] = Spree.t(:user_not_found)
78
- redirect_to spree.admin_path
79
- end
75
+ private
80
76
 
81
- @breadcrumb_icon = 'users'
82
- add_breadcrumb Spree.t(:customers), :admin_users_path
83
- add_breadcrumb @user.name, spree.admin_user_path(@user)
77
+ def set_user
78
+ @user = parent
84
79
  end
85
80
 
86
- def load_store_credit
87
- @store_credit = scope.find_by(id: params[:id]) || scope.new
88
- @object = @store_credit
81
+ def object_url
82
+ spree.admin_user_store_credit_path(parent, @store_credit)
89
83
  end
90
84
 
91
- def scope
92
- current_store.store_credits.where(user: @user)
85
+ def set_breadcrumbs
86
+ @breadcrumb_icon = 'users'
87
+ add_breadcrumb Spree.t(:customers), :admin_users_path
88
+ add_breadcrumb parent.name, spree.admin_user_path(parent)
93
89
  end
94
90
 
95
91
  def ensure_unused_store_credit
@@ -99,7 +95,11 @@ module Spree
99
95
  end
100
96
 
101
97
  def collection_url
102
- spree.admin_user_store_credits_path(@user)
98
+ spree.admin_user_store_credits_path(parent)
99
+ end
100
+
101
+ def update_turbo_stream_enabled?
102
+ true
103
103
  end
104
104
  end
105
105
  end
@@ -8,16 +8,6 @@ module Spree
8
8
 
9
9
  private
10
10
 
11
- def collection
12
- return @collection if @collection.present?
13
-
14
- @collection = super
15
-
16
- params[:q] ||= {}
17
- @search = @collection.ransack(params[:q])
18
- @collection = @search.result.all
19
- end
20
-
21
11
  def location_after_save
22
12
  spree.admin_taxonomy_path(@taxonomy)
23
13
  end
@@ -70,8 +70,12 @@ module Spree
70
70
  true
71
71
  end
72
72
 
73
- def collection
74
- super.without_previews.order(default: :desc).includes(screenshot_attachment: :blob)
73
+ def scope
74
+ super.without_previews.order(default: :desc)
75
+ end
76
+
77
+ def collection_includes
78
+ { screenshot_attachment: :blob }
75
79
  end
76
80
 
77
81
  def permitted_resource_params
@@ -50,23 +50,13 @@ module Spree
50
50
 
51
51
  protected
52
52
 
53
- def collection
54
- return @collection if @collection.present?
55
-
56
- params[:q] ||= {}
57
- params[:q][:s] ||= 'created_at desc'
58
- params[:q][:created_at_not_null] ||= 1
59
-
60
- @collection = model_class.accessible_by(current_ability, :index)
61
- @search = @collection.ransack(params[:q])
62
- @collection = @search.result(distinct: true).
63
- includes(
64
- addresses: [:country, :state],
65
- ship_address: [:country, :state],
66
- bill_address: [:country, :state],
67
- avatar_attachment: :blob
68
- ).
69
- page(params[:page]).per(params[:per_page])
53
+ def collection_includes
54
+ {
55
+ addresses: [:country, :state],
56
+ ship_address: [:country, :state],
57
+ bill_address: [:country, :state],
58
+ avatar_attachment: :blob
59
+ }
70
60
  end
71
61
 
72
62
  def find_resource
@@ -19,16 +19,6 @@ module Spree
19
19
  @resource ||= Spree::Admin::Resource.new 'spree/admin/webhooks/subscribers', 'subscribers', nil
20
20
  end
21
21
 
22
- def collection
23
- params[:q] ||= {}
24
- params[:q][:s] ||= 'created_at desc'
25
-
26
- @search = Webhooks::Subscriber.accessible_by(current_ability).ransack(params[:q])
27
- @collection = @search.result.
28
- page(params[:page]).
29
- per(params[:per_page])
30
- end
31
-
32
22
  def process_subscriptions
33
23
  return if params[:webhooks_subscriber].blank?
34
24
 
@@ -14,13 +14,6 @@ module Spree
14
14
  edit_object_url(@object, states_country_id: @selected_country&.id)
15
15
  end
16
16
 
17
- def collection
18
- params[:q] ||= {}
19
- params[:q][:s] ||= 'name asc'
20
- @search = super.ransack(params[:q])
21
- @zones = @search.result.page(params[:page]).per(params[:per_page])
22
- end
23
-
24
17
  def load_data
25
18
  @selected_country = if params[:states_country_id]
26
19
  Spree::Country.find_by(id: params[:states_country_id])
@@ -3,7 +3,23 @@ module Spree
3
3
  module DropdownHelper
4
4
  def dropdown(options = {}, &block)
5
5
  options[:class] = ['dropdown'] + Array(options[:class])
6
- options[:data] = { controller: 'dropdown' }.merge(options[:data] || {})
6
+
7
+ # Extract direction option for backward compatibility and convert to Floating UI placement
8
+ placement = case options.delete(:direction)
9
+ when 'left'
10
+ 'bottom-end'
11
+ when 'top'
12
+ 'top-start'
13
+ when 'top-left'
14
+ 'top-end'
15
+ else
16
+ options[:placement] || 'bottom-start'
17
+ end
18
+
19
+ options[:data] = {
20
+ controller: 'dropdown',
21
+ dropdown_placement_value: placement
22
+ }.merge(options[:data] || {})
7
23
  content_tag(:div, options, &block)
8
24
  end
9
25
 
@@ -19,22 +35,8 @@ module Spree
19
35
 
20
36
  def dropdown_menu(options = {}, &block)
21
37
  options[:class] = ['dropdown-container hidden'] + Array(options[:class])
22
-
23
- # Extract direction option for backward compatibility and convert to Floating UI placement
24
- placement = case options.delete(:direction)
25
- when 'left'
26
- 'bottom-end'
27
- when 'top'
28
- 'top-start'
29
- when 'top-left'
30
- 'top-end'
31
- else
32
- options[:placement] || 'bottom-start'
33
- end
34
-
35
38
  options[:data] = {
36
- dropdown_target: 'menu',
37
- dropdown_placement_value: placement
39
+ dropdown_target: 'menu'
38
40
  }.merge(options[:data] || {})
39
41
 
40
42
  content_tag(:div, options, &block)
@@ -248,7 +248,7 @@ module Spree
248
248
  end
249
249
 
250
250
  link_to url, class: 'd-flex align-items-center text-decoration-none' do
251
- content_tag(:span, icon('chevron-left', class: 'mr-0'), class: 'btn hover-gray px-2 d-flex align-items-center') +
251
+ content_tag(:span, icon('chevron-left', class: 'mr-0'), class: 'btn hover-gray shadow-none px-2 d-flex align-items-center shadow-none') +
252
252
  content_tag(:span, label, class: 'font-size-base text-black')
253
253
  end
254
254
  end
@@ -2,6 +2,8 @@ module Spree
2
2
  module Admin
3
3
  module OrdersFiltersHelper
4
4
  def params_to_filters(search_params:, vendor: nil, user: nil)
5
+ return if search_params.blank?
6
+
5
7
  if search_params.is_a?(String)
6
8
  search_params = JSON.parse(search_params).deep_symbolize_keys
7
9
  end
@@ -30,7 +30,7 @@ module Spree
30
30
  @template.content_tag(:div, class: 'form-group') do
31
31
  @template.label(@object_name, method, get_label(method, options)) +
32
32
  @template.text_field(@object_name, method, objectify_options(options)) +
33
- @template.error_message_on(@object_name, method) + field_help(method, options)
33
+ @template.error_message_on(@object_name, method) + field_help(method, options.merge(class: 'form-text mt-2'))
34
34
  end
35
35
  end
36
36
 
@@ -44,7 +44,7 @@ module Spree
44
44
  @template.content_tag(:div, class: 'form-group') do
45
45
  @template.label(@object_name, method, get_label(method, options)) +
46
46
  @template.number_field(@object_name, method, objectify_options(options)) +
47
- @template.error_message_on(@object_name, method) + field_help(method, options)
47
+ @template.error_message_on(@object_name, method) + field_help(method, options.merge(class: 'form-text mt-2'))
48
48
  end
49
49
  end
50
50
 
@@ -58,7 +58,7 @@ module Spree
58
58
  @template.content_tag(:div, class: 'form-group') do
59
59
  @template.label(@object_name, method, get_label(method, options)) +
60
60
  @template.email_field(@object_name, method, objectify_options(options)) +
61
- @template.error_message_on(@object_name, method) + field_help(method, options)
61
+ @template.error_message_on(@object_name, method) + field_help(method, options.merge(class: 'form-text mt-2'))
62
62
  end
63
63
  end
64
64
 
@@ -72,7 +72,7 @@ module Spree
72
72
  @template.content_tag(:div, class: 'form-group') do
73
73
  @template.label(@object_name, method, get_label(method, options)) +
74
74
  @template.date_field(@object_name, method, objectify_options(options)) +
75
- @template.error_message_on(@object_name, method) + field_help(method, options)
75
+ @template.error_message_on(@object_name, method) + field_help(method, options.merge(class: 'form-text mt-2'))
76
76
  end
77
77
  end
78
78
 
@@ -86,7 +86,7 @@ module Spree
86
86
  @template.content_tag(:div, class: 'form-group') do
87
87
  @template.label(@object_name, method, get_label(method, options)) +
88
88
  @template.datetime_field(@object_name, method, objectify_options(options)) +
89
- @template.error_message_on(@object_name, method) + field_help(method, options)
89
+ @template.error_message_on(@object_name, method) + field_help(method, options.merge(class: 'form-text mt-2'))
90
90
  end
91
91
  end
92
92
 
@@ -107,7 +107,7 @@ module Spree
107
107
 
108
108
  @template.label(@object_name, method, get_label(method, options)) +
109
109
  @template.text_area(@object_name, method, objectify_options(options)) +
110
- @template.error_message_on(@object_name, method) + field_help(method, options)
110
+ @template.error_message_on(@object_name, method) + field_help(method, options.merge(class: 'form-text mt-2'))
111
111
  end
112
112
  end
113
113
 
@@ -122,7 +122,7 @@ module Spree
122
122
  @template.content_tag(:div, class: 'trix-container') do
123
123
  @template.rich_text_area(@object_name, method, objectify_options(options))
124
124
  end +
125
- @template.error_message_on(@object_name, method) + field_help(method, options)
125
+ @template.error_message_on(@object_name, method) + field_help(method, options.merge(class: 'form-text mt-2'))
126
126
  end
127
127
  end
128
128
 
@@ -147,7 +147,7 @@ module Spree
147
147
  @template.content_tag(:div, class: 'form-group') do
148
148
  @template.label(@object_name, method, get_label(method, options)) +
149
149
  @template.select(@object_name, method, choices, objectify_options(options), html_options, &block) +
150
- @template.error_message_on(@object_name, method) + field_help(method, options)
150
+ @template.error_message_on(@object_name, method) + field_help(method, options.merge(class: 'form-text mt-2'))
151
151
  end
152
152
  end
153
153
 
@@ -173,7 +173,7 @@ module Spree
173
173
  @template.content_tag(:div, class: 'form-group') do
174
174
  @template.label(@object_name, method, get_label(method, options)) +
175
175
  @template.collection_select(@object_name, method, collection, value_method, text_method, objectify_options(options), html_options) +
176
- @template.error_message_on(@object_name, method) + field_help(method, options)
176
+ @template.error_message_on(@object_name, method) + field_help(method, options.merge(class: 'form-text mt-2'))
177
177
  end
178
178
  end
179
179
 
@@ -187,7 +187,7 @@ module Spree
187
187
  @template.content_tag(:div, class: 'custom-control custom-checkbox') do
188
188
  @template.check_box(@object_name, method, objectify_options(options.merge(class: 'custom-control-input'))) +
189
189
  @template.label(@object_name, method, get_label(method, options), class: 'custom-control-label')
190
- end + @template.error_message_on(@object_name, method) + field_help(method, options)
190
+ end + @template.error_message_on(@object_name, method) + field_help(method, options.merge!(class: 'form-text mt-2 ml-4'))
191
191
  end
192
192
  end
193
193
 
@@ -204,7 +204,7 @@ module Spree
204
204
  @template.content_tag(:div, class: 'custom-control custom-radio') do
205
205
  @template.radio_button(@object_name, method, tag_value, objectify_options(options.merge(class: 'custom-control-input'))) +
206
206
  @template.label(@object_name, method, get_label(method, options), class: 'custom-control-label', for: options[:id])
207
- end + @template.error_message_on(@object_name, method) + field_help(method, options)
207
+ end + @template.error_message_on(@object_name, method) + field_help(method, options.merge(class: 'form-text mt-2'))
208
208
  end
209
209
  end
210
210
 
@@ -215,7 +215,8 @@ module Spree
215
215
  # @option options [String] :help help text to display
216
216
  # @return [String] HTML string containing the help text or empty string
217
217
  def field_help(_method, options = {})
218
- @template.content_tag(:span, options[:help], class: 'form-text mt-2')
218
+ options[:class] ||= 'form-text mt-2'
219
+ @template.content_tag(:span, options[:help], class: options[:class])
219
220
  end
220
221
 
221
222
  private
@@ -3,7 +3,7 @@
3
3
  <table class="table">
4
4
  <thead>
5
5
  <tr>
6
- <th scope="col"><%= sort_link search_collection, :name, Spree.t(:name) %></th>
6
+ <th scope="col"><%= sort_link @search, :name, Spree.t(:name) %></th>
7
7
  <th scope="col"><%= Spree.t(:active) %>?</th>
8
8
  <th scope="col"><%= Spree.t(:default) %>?</th>
9
9
  <th scope="col"></th>
@@ -4,7 +4,7 @@
4
4
  <% if @product.has_variants? %>
5
5
  <th scope="col"><%= Spree.t(:variant) %></th>
6
6
  <% end %>
7
- <th scope="col"><%= sort_link search_collection, :name, Spree.t(:name) %></th>
7
+ <th scope="col"><%= sort_link @search, :name, Spree.t(:name) %></th>
8
8
  <th scope="col"><%= Spree.t(:size) %></th>
9
9
  <th scope="col"></th>
10
10
  </tr>
@@ -6,7 +6,8 @@
6
6
  class: "filter-wrap",
7
7
  data: {
8
8
  controller: "filters dropdown",
9
- filters_url_value: request.url
9
+ filters_url_value: request.url,
10
+ dropdown_placement_value: "bottom-end"
10
11
  } do |f| %>
11
12
  <%= hidden_field_tag :frame_name, frame_name if frame_name.present? %>
12
13
 
@@ -14,16 +14,28 @@
14
14
  <%= Spree.t('admin.integrations.page_subtitle') %>
15
15
  </div>
16
16
 
17
- <% grouped_available_store_integrations.each do |group, integrations| %>
18
- <% if group.present? %>
19
- <div class="my-2 text-muted font-weight-light text-uppercase"><%= Spree.t(group) %></div>
17
+ <% if grouped_available_store_integrations.any? %>
18
+ <% grouped_available_store_integrations.each do |group, integrations| %>
19
+ <% if group.present? %>
20
+ <div class="my-2 text-muted font-weight-light text-uppercase"><%= Spree.t(group) %></div>
21
+ <% end %>
22
+
23
+ <div class="row row-cols-1 row-cols-md-2 row-cols-lg-3 mb-4">
24
+ <% integrations.each do |integration| %>
25
+ <%= render 'spree/admin/integrations/integration', integration_class: integration %>
26
+ <% end %>
27
+ </div>
20
28
  <% end %>
21
29
 
22
- <div class="row row-cols-1 row-cols-md-2 row-cols-lg-3 mb-4">
23
- <% integrations.each do |integration| %>
24
- <%= render 'spree/admin/integrations/integration', integration_class: integration %>
25
- <% end %>
26
- </div>
30
+ <p class="text-muted text-center my-5">
31
+ Find more integrations in <%= external_link_to 'Integrations Directory', 'https://spreecommerce.org/docs/integrations/integrations', class: 'text-decoration-none font-weight-bold', target: '_blank' %>
32
+ </p>
33
+ <% else %>
34
+ <p class="text-muted text-center my-5">
35
+ No integrations installed yet. Find integrations in
36
+
37
+ <%= external_link_to 'Integrations Directory', 'https://spreecommerce.org/docs/integrations/integrations', class: 'text-decoration-none font-weight-bold', target: '_blank' %>
38
+ </p>
27
39
  <% end %>
28
40
  </div>
29
41
  </div>
@@ -12,7 +12,8 @@
12
12
  <%= f.spree_date_field :expires_at, required: true, data: { 'enable-button-target': 'input' } %>
13
13
  </div>
14
14
  <div class="dialog-footer">
15
- <%= turbo_save_button_tag nil, class: 'btn btn-primary', data: { 'enable-button-target': 'button' } do %>
15
+ <%= dialog_discard_button %>
16
+ <%= turbo_save_button_tag do %>
16
17
  <%= icon 'send' %>
17
18
  <%= Spree.t('actions.send_invitation') %>
18
19
  <% end %>
@@ -1,4 +1,4 @@
1
- <%= search_form_for [:admin, search_collection], class: "filter-wrap", data: {controller: "filters auto-submit"} do |f| %>
1
+ <%= search_form_for [:admin, @search], class: "filter-wrap", data: {controller: "filters auto-submit"} do |f| %>
2
2
  <div class="d-flex">
3
3
  <%= render 'spree/admin/shared/filters_search_bar', param: :multi_search, label: Spree.t(:title) %>
4
4
 
@@ -1,4 +1,4 @@
1
- <%= search_form_for [:admin, search_collection], class: "filter-wrap", data: { controller: "filters" } do |f| %>
1
+ <%= search_form_for [:admin, @search], class: "filter-wrap", data: { controller: "filters" } do |f| %>
2
2
  <div class="d-flex flex-column flex-lg-row gap-2">
3
3
  <%= render 'spree/admin/shared/filters_search_bar', param: :email_cont, label: Spree.t(:email) %>
4
4
 
@@ -1,8 +1,8 @@
1
1
  <tr>
2
- <th scope="col"><%= sort_link search_collection, :email, Spree.t(:email) %></th>
2
+ <th scope="col"><%= sort_link @search, :email, Spree.t(:email) %></th>
3
3
  <th scope="col"><%= Spree.t(:customer) %></th>
4
4
  <th scope="col"><%= Spree.t(:verified) %>?</th>
5
5
  <th scope="col"><%= Spree.t(:verified_at) %></th>
6
- <th scope="col"><%= sort_link search_collection, :created_at, Spree.t(:created_at) %></th>
6
+ <th scope="col"><%= sort_link @search, :created_at, Spree.t(:created_at) %></th>
7
7
  <th scope="col"></th>
8
8
  </tr>
@@ -1,5 +1,5 @@
1
1
  <tr>
2
- <th scope="col"><%= sort_link search_collection, :name, Spree.t(:name) %></th>
2
+ <th scope="col"><%= sort_link @search, :name, Spree.t(:name) %></th>
3
3
  <th scope="col"><%= Spree.t('admin.oauth_applications.client_id') %></th>
4
4
  <th scope="col"><%= Spree.t('admin.oauth_applications.scopes') %></th>
5
5
  <th scope="col"><%= Spree.t('admin.oauth_applications.last_used') %></th>
@@ -6,7 +6,7 @@
6
6
  <% if can?(:update_customer, @order) || can?(:update_addresses, @order) %>
7
7
  <%= dropdown id: 'customer-edit-dropdown', class: 'ml-auto' do %>
8
8
  <%= dropdown_toggle class: 'btn-light btn-sm px-1', data: { test_id: 'dropdown-toggle' } do %>
9
- <%= icon 'dots-vertical' %>
9
+ <%= icon 'dots-vertical', class: 'mr-0' %>
10
10
  <% end %>
11
11
  <%= dropdown_menu class: 'dropdown-menu-right' do %>
12
12
  <% if can?(:update_customer, @order) && !@order.user.present? %>
@@ -15,7 +15,8 @@
15
15
  class: "filter-wrap",
16
16
  data: {
17
17
  controller: "filters dropdown",
18
- filters_url_value: request.url
18
+ filters_url_value: request.url,
19
+ dropdown_placement_value: "bottom-end"
19
20
  } do |f| %>
20
21
  <%= hidden_field_tag :frame_name, frame_name if frame_name.present? %>
21
22
 
@@ -27,15 +28,13 @@
27
28
  date_from_input_name: "q[created_at_gt]",
28
29
  date_to_input_name: "q[created_at_lt]",
29
30
  date_from_value: params.dig(:q, :created_at_gt),
30
- date_to_value: params.dig(:q, :created_at_lt),
31
- dropdown_direction: "right" %>
31
+ date_to_value: params.dig(:q, :created_at_lt) %>
32
32
  <% else %>
33
33
  <%= render "spree/admin/shared/calendar_range_picker",
34
34
  date_from_input_name: "q[completed_at_gt]",
35
35
  date_to_input_name: "q[completed_at_lt]",
36
36
  date_from_value: params.dig(:q, :completed_at_gt),
37
- date_to_value: params.dig(:q, :completed_at_lt),
38
- dropdown_direction: "right" %>
37
+ date_to_value: params.dig(:q, :completed_at_lt) %>
39
38
  <% end %>
40
39
 
41
40
  <%= render "spree/admin/orders/table_filter_dropdown" %>
@@ -41,8 +41,6 @@
41
41
  can?(:create, Spree::CustomerReturn) && @order.return_authorizations.exists? %>
42
42
 
43
43
  <% if can_create_ra || can_create_cr %>
44
- <div class="dropdown-divider"></div>
45
-
46
44
  <% if can_create_ra %>
47
45
  <%= link_to_with_icon "plus", Spree.t(:new_return_authorization),
48
46
  spree.new_admin_order_return_authorization_path(@order),
@@ -54,8 +52,6 @@
54
52
  spree.new_admin_order_customer_return_path(@order),
55
53
  class: "btn dropdown-item" %>
56
54
  <% end %>
57
-
58
- <div class="dropdown-divider"></div>
59
55
  <% end %>
60
56
  <% end %>
61
57
 
@@ -69,6 +65,5 @@
69
65
  <%= icon "cancel" %>
70
66
  <%= Spree.t(:cancel_order) %>
71
67
  <% end %>
72
- <div class="dropdown-divider"></div>
73
68
  <% end %>
74
69
  <% end %>