spree_admin 5.2.0.rc1 → 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 (115) 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 +10 -8
  6. data/app/assets/stylesheets/spree/admin/components/_filters.scss +2 -0
  7. data/app/assets/stylesheets/spree/admin/components/_main.scss +7 -7
  8. data/app/assets/stylesheets/spree/admin/components/_tables.scss +2 -2
  9. data/app/assets/stylesheets/spree/admin/components/_variants_form.scss +1 -2
  10. data/app/assets/stylesheets/spree/admin/global/_variables.scss +14 -12
  11. data/app/assets/stylesheets/spree/admin/shared/_base.scss +2 -2
  12. data/app/assets/stylesheets/spree/admin/shared/_forms.scss +5 -6
  13. data/app/controllers/spree/admin/admin_users_controller.rb +0 -2
  14. data/app/controllers/spree/admin/base_controller.rb +1 -0
  15. data/app/controllers/spree/admin/checkouts_controller.rb +1 -4
  16. data/app/controllers/spree/admin/coupon_codes_controller.rb +0 -14
  17. data/app/controllers/spree/admin/customer_returns_controller.rb +0 -13
  18. data/app/controllers/spree/admin/digital_assets_controller.rb +2 -2
  19. data/app/controllers/spree/admin/exports_controller.rb +2 -9
  20. data/app/controllers/spree/admin/gift_cards_controller.rb +7 -14
  21. data/app/controllers/spree/admin/invitations_controller.rb +0 -2
  22. data/app/controllers/spree/admin/oauth_applications_controller.rb +0 -10
  23. data/app/controllers/spree/admin/option_types_controller.rb +0 -10
  24. data/app/controllers/spree/admin/orders_controller.rb +1 -1
  25. data/app/controllers/spree/admin/pages_controller.rb +1 -1
  26. data/app/controllers/spree/admin/payment_methods_controller.rb +0 -10
  27. data/app/controllers/spree/admin/policies_controller.rb +4 -0
  28. data/app/controllers/spree/admin/posts_controller.rb +2 -10
  29. data/app/controllers/spree/admin/properties_controller.rb +0 -12
  30. data/app/controllers/spree/admin/resource_controller.rb +27 -18
  31. data/app/controllers/spree/admin/return_authorizations_controller.rb +0 -10
  32. data/app/controllers/spree/admin/shipping_methods_controller.rb +4 -0
  33. data/app/controllers/spree/admin/stock_items_controller.rb +8 -11
  34. data/app/controllers/spree/admin/stock_locations_controller.rb +1 -1
  35. data/app/controllers/spree/admin/stock_transfers_controller.rb +0 -10
  36. data/app/controllers/spree/admin/store_credits_controller.rb +35 -35
  37. data/app/controllers/spree/admin/taxonomies_controller.rb +0 -10
  38. data/app/controllers/spree/admin/themes_controller.rb +6 -2
  39. data/app/controllers/spree/admin/users_controller.rb +7 -17
  40. data/app/controllers/spree/admin/webhooks_subscribers_controller.rb +0 -10
  41. data/app/controllers/spree/admin/zones_controller.rb +0 -7
  42. data/app/helpers/spree/admin/dropdown_helper.rb +24 -10
  43. data/app/helpers/spree/admin/navigation_helper.rb +1 -1
  44. data/app/helpers/spree/admin/orders_filters_helper.rb +2 -0
  45. data/app/javascript/spree/admin/application.js +2 -2
  46. data/app/javascript/spree/admin/controllers/dropdown_controller.js +154 -0
  47. data/app/models/spree/admin/form_builder.rb +13 -12
  48. data/app/models/spree/admin/updater.rb +2 -2
  49. data/app/views/spree/admin/custom_domains/_custom_domains.html.erb +1 -1
  50. data/app/views/spree/admin/digital_assets/_table.html.erb +1 -1
  51. data/app/views/spree/admin/gift_cards/_filters.html.erb +2 -1
  52. data/app/views/spree/admin/integrations/index.html.erb +20 -8
  53. data/app/views/spree/admin/invitations/new.html.erb +2 -1
  54. data/app/views/spree/admin/metafield_definitions/_filters.html.erb +1 -1
  55. data/app/views/spree/admin/newsletter_subscribers/_filters.html.erb +1 -1
  56. data/app/views/spree/admin/newsletter_subscribers/_table_header.html.erb +2 -2
  57. data/app/views/spree/admin/oauth_applications/_table_header.html.erb +1 -1
  58. data/app/views/spree/admin/orders/_customer.html.erb +1 -1
  59. data/app/views/spree/admin/orders/_filters.html.erb +4 -5
  60. data/app/views/spree/admin/orders/_header.html.erb +0 -5
  61. data/app/views/spree/admin/orders/_list.html.erb +3 -3
  62. data/app/views/spree/admin/page_blocks/edit.html.erb +3 -3
  63. data/app/views/spree/admin/page_builder/_add_block.html.erb +1 -1
  64. data/app/views/spree/admin/page_builder/_header.html.erb +1 -1
  65. data/app/views/spree/admin/page_builder/_pages_dropdown.html.erb +2 -2
  66. data/app/views/spree/admin/page_builder/_sidebar_block.html.erb +1 -1
  67. data/app/views/spree/admin/page_builder/_sidebar_colors.html.erb +2 -2
  68. data/app/views/spree/admin/page_builder/_sidebar_fonts.html.erb +3 -3
  69. data/app/views/spree/admin/page_builder/_sidebar_section.html.erb +1 -1
  70. data/app/views/spree/admin/page_links/_list.html.erb +1 -1
  71. data/app/views/spree/admin/page_links/edit.html.erb +1 -1
  72. data/app/views/spree/admin/page_sections/edit.html.erb +3 -3
  73. data/app/views/spree/admin/page_sections/new.html.erb +1 -1
  74. data/app/views/spree/admin/pages/_table_header.html.erb +3 -3
  75. data/app/views/spree/admin/payment_methods/index.html.erb +5 -1
  76. data/app/views/spree/admin/policies/_filters.html.erb +1 -1
  77. data/app/views/spree/admin/posts/_form.html.erb +0 -2
  78. data/app/views/spree/admin/products/_bulk_operations.html.erb +2 -2
  79. data/app/views/spree/admin/products/edit.html.erb +0 -2
  80. data/app/views/spree/admin/products/form/_status.html.erb +0 -3
  81. data/app/views/spree/admin/products/form/_variants.html.erb +1 -1
  82. data/app/views/spree/admin/promotions/_table_header.html.erb +1 -1
  83. data/app/views/spree/admin/promotions/form/_kind.html.erb +4 -4
  84. data/app/views/spree/admin/refund_reasons/_table_header.html.erb +1 -1
  85. data/app/views/spree/admin/reimbursement_types/_form.html.erb +1 -0
  86. data/app/views/spree/admin/reimbursement_types/_table_header.html.erb +1 -1
  87. data/app/views/spree/admin/return_authorization_reasons/_table_header.html.erb +1 -1
  88. data/app/views/spree/admin/roles/index.html.erb +1 -1
  89. data/app/views/spree/admin/shared/_calendar_range_picker.html.erb +2 -2
  90. data/app/views/spree/admin/shared/_content_header.html.erb +4 -1
  91. data/app/views/spree/admin/shared/_index_table.html.erb +5 -4
  92. data/app/views/spree/admin/shared/_index_table_options.html.erb +1 -1
  93. data/app/views/spree/admin/shared/_new_item_dropdown.html.erb +1 -1
  94. data/app/views/spree/admin/shared/_user_dropdown.html.erb +4 -3
  95. data/app/views/spree/admin/shared/sidebar/_store_dropdown.html.erb +1 -1
  96. data/app/views/spree/admin/shipping_categories/_table_header.html.erb +1 -1
  97. data/app/views/spree/admin/shipping_methods/_table_header.html.erb +1 -1
  98. data/app/views/spree/admin/stock_locations/_table_header.html.erb +2 -2
  99. data/app/views/spree/admin/store_credit_categories/index.html.erb +1 -1
  100. data/app/views/spree/admin/store_credits/_list.html.erb +3 -3
  101. data/app/views/spree/admin/stores/form/_checkout.html.erb +2 -2
  102. data/app/views/spree/admin/stores/form/_checkout_links.html.erb +1 -1
  103. data/app/views/spree/admin/stores/form/_policies.html.erb +5 -5
  104. data/app/views/spree/admin/tax_categories/_table_header.html.erb +2 -2
  105. data/app/views/spree/admin/tax_rates/_table_header.html.erb +2 -2
  106. data/app/views/spree/admin/taxonomies/_table_header.html.erb +1 -1
  107. data/app/views/spree/admin/users/_filters.html.erb +9 -3
  108. data/app/views/spree/admin/users/index.html.erb +1 -1
  109. data/config/importmap.rb +0 -1
  110. data/config/locales/en.yml +2 -0
  111. data/lib/generators/spree/admin/devise/devise_generator.rb +33 -0
  112. data/lib/generators/spree/admin/scaffold/templates/views/_filters.html.erb.tt +1 -1
  113. data/lib/generators/spree/admin/scaffold/templates/views/_table_header.html.erb.tt +2 -2
  114. metadata +10 -9
  115. data/vendor/javascript/@stimulus-components--dropdown.js +0 -4
@@ -9,7 +9,7 @@
9
9
  <%= f.radio_button :multi_codes, false, data: { action: 'change->reveal#toggle' }, class: 'custom-control-input' %>
10
10
  <%= f.label :multi_codes_false, class: 'custom-control-label' do %>
11
11
  One code for all customers
12
- <span class="form-text font-weight-normal mr-1">
12
+ <span class="form-text font-weight-normal mr-1 mt-2">
13
13
  You can limit the number of times this code can be used.
14
14
  </span>
15
15
  <% end %>
@@ -22,7 +22,7 @@
22
22
  <%= f.radio_button :multi_codes, true, data: { action: 'change->reveal#toggle' }, class: 'custom-control-input' %>
23
23
  <%= f.label :multi_codes_true, class: 'custom-control-label' do %>
24
24
  Generate unique codes
25
- <span class="form-text font-weight-normal mr-1">
25
+ <span class="form-text font-weight-normal mr-1 mt-2">
26
26
  These codes are generated automatically and can be downloaded as a CSV file. Codes are unique and can only be used once.
27
27
  </span>
28
28
  <% end %>
@@ -30,7 +30,7 @@
30
30
  <div data-reveal-target="item" class="ml-3 mt-2 row <% unless @promotion.multi_codes? %>hidden<% end %>">
31
31
  <div class="col-6">
32
32
  <%= f.text_field :code_prefix, class: 'form-control text-uppercase', placeholder: 'Coupon Prefix (optional)' %>
33
- <span class="form-text">
33
+ <span class="form-text mt-2">
34
34
  eg. <strong>ABC</strong>
35
35
  </span>
36
36
  </div>
@@ -38,7 +38,7 @@
38
38
  <% minimum_number_of_codes = @promotion.persisted? && @promotion.coupon_codes.count.positive? ? @promotion.coupon_codes.count : 1 %>
39
39
  <% maximum_number_of_codes = ENV.fetch('PROMOTION_MAX_NUMBER_OF_CODES', 5000) %>
40
40
  <%= f.number_field :number_of_codes, class: 'form-control', placeholder: 'Number of codes', min: minimum_number_of_codes, max: maximum_number_of_codes, step: 1 %>
41
- <span class="form-text">
41
+ <span class="form-text mt-2">
42
42
  How many codes you want to generate.
43
43
  <% if @promotion.persisted? %>
44
44
  To add more codes just increase this number
@@ -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(:status) %></th>
4
4
  <th scope="col"><%= Spree.t(:mutable) %></th>
5
5
  <th scope="col"></th>
@@ -7,6 +7,7 @@
7
7
  Spree::ReimbursementType::KINDS.map do |kind|
8
8
  [kind.demodulize.titleize, kind]
9
9
  end,
10
+ f.object.type
10
11
  ),
11
12
  { include_blank: false, label: Spree.t(:type), autocomplete: true } %>
12
13
 
@@ -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(:type) %></th>
4
4
  <th scope="col"><%= Spree.t(:status) %></th>
5
5
  <th scope="col"><%= Spree.t(:mutable) %></th>
@@ -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(:status) %></th>
4
4
  <th scope="col"></th>
5
5
  </tr>
@@ -13,7 +13,7 @@
13
13
  <table class="table">
14
14
  <thead>
15
15
  <tr>
16
- <th scope="col"><%= sort_link search_collection, :name, Spree.t(:name) %></th>
16
+ <th scope="col"><%= sort_link @search, :name, Spree.t(:name) %></th>
17
17
  <th scope="col"><%= Spree.t(:permissions) %></th>
18
18
  <th scope="col"></th>
19
19
  </tr>
@@ -7,7 +7,7 @@
7
7
 
8
8
  <% dropdown_direction ||= 'left' %>
9
9
 
10
- <%= dropdown data: { controller: 'dropdown calendar-range', action: 'click->calendar-range#open' }, class: 'h-100' do %>
10
+ <%= dropdown direction: dropdown_direction, data: { controller: 'dropdown calendar-range', action: 'click->calendar-range#open' }, class: 'h-100' do %>
11
11
  <%= dropdown_toggle class: css_classes do %>
12
12
  <%= icon('calendar', class: 'mr-2') %>
13
13
  <div data-calendar-range-target="label">
@@ -18,7 +18,7 @@
18
18
  <% end %>
19
19
  </div>
20
20
  <% end %>
21
- <%= dropdown_menu direction: dropdown_direction, class: "pt-2 px-2 pb-1" do %>
21
+ <%= dropdown_menu class: "pt-2 px-2 pb-1" do %>
22
22
  <div data-calendar-range-target="picker" class="d-none"></div>
23
23
  <% end %>
24
24
 
@@ -27,7 +27,10 @@
27
27
  <%= icon 'dots-vertical', class: 'mr-0' %>
28
28
  <% end %>
29
29
  <%= dropdown_menu id: 'page_actions_dropdown_menu' do %>
30
- <%= yield :page_actions_dropdown if content_for(:page_actions_dropdown) %>
30
+ <% if content_for?(:page_actions_dropdown) %>
31
+ <%= yield :page_actions_dropdown %>
32
+ <div class="dropdown-divider"></div>
33
+ <% end %>
31
34
  <% if record && record.persisted? %>
32
35
  <%= link_to_edit_metafields(record) %>
33
36
  <%= link_to_edit_translations(record) %>
@@ -1,13 +1,14 @@
1
1
  <% sortable = local_assigns[:sortable] %>
2
+ <% frame_name = local_assigns[:frame_name] || controller_name %>
2
3
 
3
- <%= turbo_frame_tag controller_name, autoscroll: true, data: { autoscroll_block: :start, autoscroll_behavior: :smooth, turbo_action: 'advance' } do %>
4
+ <%= turbo_frame_tag frame_name, autoscroll: true, data: { autoscroll_block: :start, autoscroll_behavior: :smooth, turbo_action: 'advance' } do %>
4
5
  <%= render 'spree/admin/shared/export_modal', export_type: export_type if local_assigns[:export_type] %>
5
6
  <div class="card-lg">
6
7
  <% if lookup_context.template_exists?('filters', lookup_context.prefixes, true) %>
7
8
  <%= render 'filters' %>
8
9
  <% end %>
9
10
 
10
- <% if paginated_collection.any? %>
11
+ <% if @collection.any? %>
11
12
  <div class="<% if lookup_context.template_exists?('filters', lookup_context.prefixes, true) %>with-filters<% end %>" id="listing_<%= controller_name %>">
12
13
  <table class="table">
13
14
  <thead>
@@ -21,12 +22,12 @@
21
22
  data-sortable-response-kind-value="turbo-stream"
22
23
  <% end %>
23
24
  >
24
- <%= render partial: 'table_row', collection: paginated_collection, as: controller_name.singularize %>
25
+ <%= render partial: 'table_row', collection: @collection, as: controller_name.singularize %>
25
26
  </tbody>
26
27
  </table>
27
28
  </div>
28
29
 
29
- <%= render 'spree/admin/shared/index_table_options', collection: paginated_collection %>
30
+ <%= render 'spree/admin/shared/index_table_options', collection: @collection %>
30
31
  <% else %>
31
32
  <%= render 'spree/admin/shared/no_resource_found', new_object_url: (new_object_url if can?(:create, model_class)) %>
32
33
  <% end %>
@@ -12,7 +12,7 @@
12
12
  <div class="d-none d-lg-block text-center text-muted">
13
13
  <%= page_entries_info(collection, entry_name: entry_name) %>
14
14
  </div>
15
- <div class="text-right pr-lg-2">
15
+ <div class="text-right">
16
16
  <%= paginate collection, theme: 'admin-twitter-bootstrap-4' %>
17
17
  </div>
18
18
  </div>
@@ -2,7 +2,7 @@
2
2
  <%= dropdown_toggle class: 'btn-light btn-sm px-1' do %>
3
3
  <%= icon 'plus', class: 'mr-0' %>
4
4
  <% end %>
5
- <%= dropdown_menu direction: 'left' do %>
5
+ <%= dropdown_menu do %>
6
6
  <%= link_to_with_icon 'shopping-bag-plus', Spree.t(:new_order), spree.new_admin_order_path, class: "dropdown-item" if can?(:manage, Spree::Order) %>
7
7
 
8
8
  <%= link_to spree.new_admin_product_path, class: 'dropdown-item' do %>
@@ -1,6 +1,6 @@
1
1
  <% if try_spree_current_user.present? %>
2
2
  <%= dropdown id: dom_id(try_spree_current_user, 'account-dropdown') do %>
3
- <%= dropdown_toggle class: 'd-flex align-items-center justify-content-between text-left w-100 pr-0' do %>
3
+ <%= dropdown_toggle class: 'd-flex align-items-center justify-content-between text-left w-100 pr-0 shadow-none' do %>
4
4
  <%= render_avatar(try_spree_current_user, width: 32, height: 32) %>
5
5
  <% end %>
6
6
  <%= dropdown_menu class: 'dropdown-menu-right', style: 'min-width: 250px;' do %>
@@ -29,8 +29,9 @@
29
29
  <h6 class="dropdown-header mt-2">
30
30
  <%= Spree.t(:support) %>
31
31
  </h6>
32
- <%= external_link_to Spree.t(:help_center), 'https://spreecommerce.org/docs/user', class: 'dropdown-item justify-content-between', target: '_blank' %>
33
- <%= external_link_to Spree.t(:contact_us), 'https://spreecommerce.org/contact/', class: 'dropdown-item justify-content-between', target: '_blank' %>
32
+ <%= link_to_with_icon 'book', Spree.t('admin.documentation'), 'https://spreecommerce.org/docs', class: 'dropdown-item', target: '_blank' %>
33
+ <%= link_to_with_icon 'brand-slack', Spree.t('admin.slack'), 'https://slack.spreecommerce.org/', class: 'dropdown-item', target: '_blank' %>
34
+ <%= link_to_with_icon 'message', Spree.t(:contact_us), 'https://spreecommerce.org/contact/', class: 'dropdown-item', target: '_blank' %>
34
35
  <% end %>
35
36
 
36
37
  <div class="dropdown-divider"></div>
@@ -4,7 +4,7 @@
4
4
  <%= store_admin_icon(current_store, height: 32, width: 32) %>
5
5
  <%= truncate(current_store.name, length: 10) %>
6
6
  <% end %>
7
- <%= dropdown_menu class: 'ml-2', direction: 'left' do %>
7
+ <%= dropdown_menu class: 'ml-2' do %>
8
8
  <%= link_to current_store.formatted_url_or_custom_domain, class: 'dropdown-item', target: '_blank' do %>
9
9
  <%= icon 'eye' %>
10
10
  <%= Spree.t(:view_store) %>
@@ -1,4 +1,4 @@
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"></th>
4
4
  </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(:zone) %></th>
4
4
  <th scope="col"><%= Spree.t(:estimated_delivery_time) %></th>
5
5
  <th scope="col"><%= Spree.t(:amount) %></th>
@@ -1,6 +1,6 @@
1
1
  <tr>
2
- <th scope="col"><%= sort_link search_collection, :name, Spree.t(:name) %></th>
3
- <th scope="col"><%= sort_link search_collection, :country, Spree.t(:country) %></th>
2
+ <th scope="col"><%= sort_link @search, :name, Spree.t(:name) %></th>
3
+ <th scope="col"><%= sort_link @search, :country, Spree.t(:country) %></th>
4
4
  <th scope="col"><%= Spree.t(:active) %>?</th>
5
5
  <% if can?(:mark_as_default, Spree::StockLocation) %>
6
6
  <th scope="col"><%= Spree.t(:default) %>?</th>
@@ -15,7 +15,7 @@
15
15
  <table class="table">
16
16
  <thead>
17
17
  <tr>
18
- <th scope="col"><%= sort_link search_collection, :name, Spree.t(:name) %></th>
18
+ <th scope="col"><%= sort_link @search, :name, Spree.t(:name) %></th>
19
19
  <th scope="col"></th>
20
20
  </tr>
21
21
  </thead>
@@ -1,4 +1,4 @@
1
- <% if @store_credits.any? %>
1
+ <% if @collection.any? %>
2
2
  <div class="table-responsive">
3
3
  <table class="table">
4
4
  <thead>
@@ -11,11 +11,11 @@
11
11
  <th scope="col"><%= Spree.t(:issued_on) %></th>
12
12
  </thead>
13
13
  <tbody>
14
- <%= render partial: 'spree/admin/store_credits/store_credit', collection: @store_credits, as: :store_credit, cached: spree_base_cache_scope %>
14
+ <%= render partial: 'spree/admin/store_credits/store_credit', collection: @collection, as: :store_credit, cached: spree_base_cache_scope %>
15
15
  </tbody>
16
16
  </table>
17
17
  </div>
18
- <%= render partial: 'spree/admin/shared/index_table_options', locals: { collection: @store_credits } %>
18
+ <%= render partial: 'spree/admin/shared/index_table_options', locals: { collection: @collection } %>
19
19
  <% else %>
20
20
  <%= render 'spree/admin/shared/no_resource_found', model_class: Spree::StoreCredit, new_object_url: spree.new_admin_user_store_credit_path(@user) %>
21
21
  <% end %>
@@ -9,10 +9,10 @@
9
9
 
10
10
  <div class="card-body">
11
11
  <%= f.spree_select :checkout_zone_id, options_for_select(@zones, @store.checkout_zone_id), { label: Spree.t(:shipping_zone), autocomplete: true } %>
12
- <small class="form-text mb-3">
12
+ <span class="form-text mb-3">
13
13
  <%= Spree.t(:shipping_zone_help) %>
14
14
  <%= link_to Spree.t('admin.manage_zones'), spree.admin_zones_path, class: 'text-blue' %>
15
- </small>
15
+ </span>
16
16
 
17
17
  <%= f.spree_select :default_country_iso, Spree::Country.pluck(:name, :iso), { include_blank: false, label: Spree.t(:default_country), autocomplete: true, help: Spree.t(:default_country_help) } %>
18
18
 
@@ -11,7 +11,7 @@
11
11
  >
12
12
  <%= turbo_frame_tag spree_dom_id(link), class: 'd-flex align-items-center w-100 py-2 pl-3 pr-2' do %>
13
13
  <%= link_to link.label, spree.edit_admin_page_link_path(link), class: 'd-block text-dark flex-fill' %>
14
- <button class="btn btn-sm pr-0 handle hover-gray h-100 px-1">
14
+ <button class="btn btn-sm pr-0 handle shadow-none hover-gray-200 px-1">
15
15
  <%= icon 'grip-vertical', class: 'mr-0' %>
16
16
  </button>
17
17
  <% end %>
@@ -14,7 +14,7 @@
14
14
  <p class="text-muted">
15
15
  Customers will need to accept these terms of service during signup.
16
16
  </p>
17
- <%= f.spree_rich_text_area :customer_terms_of_service, style: 'height: 300px', label: Spree.t(:terms_of_service) %>
17
+ <%= f.spree_rich_text_area :customer_terms_of_service, label: Spree.t(:terms_of_service) %>
18
18
  </div>
19
19
  </div>
20
20
 
@@ -26,7 +26,7 @@
26
26
  <p class="text-muted">
27
27
  Customers will need to accept these privacy policy during signup.
28
28
  </p>
29
- <%= f.spree_rich_text_area :customer_privacy_policy, style: 'height: 300px', label: Spree.t(:privacy_policy) %>
29
+ <%= f.spree_rich_text_area :customer_privacy_policy, label: Spree.t(:privacy_policy) %>
30
30
  </div>
31
31
  </div>
32
32
 
@@ -38,7 +38,7 @@
38
38
  <p class="text-muted">
39
39
  Please provide your customers with a clear and transparent returns policy.
40
40
  </p>
41
- <%= f.spree_rich_text_area :customer_returns_policy, style: 'height: 300px', label: Spree.t(:returns_policy) %>
41
+ <%= f.spree_rich_text_area :customer_returns_policy, label: Spree.t(:returns_policy) %>
42
42
  </div>
43
43
  </div>
44
44
 
@@ -50,7 +50,7 @@
50
50
  <p class="text-muted">
51
51
  Please provide your customers with a clear and transparent shipping policy.
52
52
  </p>
53
- <%= f.spree_rich_text_area :customer_shipping_policy, style: 'height: 300px', label: Spree.t(:shipping_policy) %>
53
+ <%= f.spree_rich_text_area :customer_shipping_policy, label: Spree.t(:shipping_policy) %>
54
54
  </div>
55
55
  </div>
56
56
 
@@ -63,7 +63,7 @@
63
63
  <p class="text-muted">
64
64
  Vendors you invite will need to accept these terms of service during their onboarding process.
65
65
  </p>
66
- <%= f.spree_rich_text_area :partners_terms_of_service, style: 'height: 300px', label: Spree.t(:terms_of_service) %>
66
+ <%= f.spree_rich_text_area :partners_terms_of_service, label: Spree.t(:terms_of_service) %>
67
67
  </div>
68
68
  </div>
69
69
  <% end %>
@@ -1,6 +1,6 @@
1
1
  <tr>
2
- <th scope="col"><%= sort_link search_collection, :name, Spree.t(:name) %></th>
3
- <th scope="col"><%= sort_link search_collection, :tax_code, Spree.t(:tax_code) %></th>
2
+ <th scope="col"><%= sort_link @search, :name, Spree.t(:name) %></th>
3
+ <th scope="col"><%= sort_link @search, :tax_code, Spree.t(:tax_code) %></th>
4
4
  <th scope="col"><%= Spree.t(:description) %></th>
5
5
  <th scope="col"><%= Spree.t(:default) %></th>
6
6
  <th scope="col"></th>
@@ -1,8 +1,8 @@
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(:tax_category) %></th>
4
4
  <th scope="col"><%= Spree.t(:zone) %></th>
5
- <th scope="col"><%= sort_link search_collection, :amount, Spree.t(:amount) %></th>
5
+ <th scope="col"><%= sort_link @search, :amount, Spree.t(:amount) %></th>
6
6
  <th scope="col"><%= Spree.t(:included_in_price) %></th>
7
7
  <th scope="col"><%= Spree.t(:show_rate_in_label) %></th>
8
8
  <th scope="col"></th>
@@ -1,6 +1,6 @@
1
1
  <tr data-hook="listing_taxonomies_header">
2
2
  <th class="no-border handel-head"></th>
3
- <th scope="col"><%= sort_link search_collection, :name, Spree.t(:name) %></th>
3
+ <th scope="col"><%= sort_link @search, :name, Spree.t(:name) %></th>
4
4
  <th scope="col"><%= Spree.t(:taxons) %></th>
5
5
  <th scope="col"></th>
6
6
  </tr>
@@ -2,6 +2,12 @@
2
2
  <div class="d-flex flex-column flex-lg-row gap-2">
3
3
  <%= render 'spree/admin/shared/filters_search_bar', param: :multi_search, placeholder: Spree.t('admin.users.filters.search_placeholder') %>
4
4
 
5
+ <%= render "spree/admin/shared/calendar_range_picker",
6
+ date_from_input_name: "q[created_at_gt]",
7
+ date_to_input_name: "q[created_at_lt]",
8
+ date_from_value: params.dig(:q, :created_at_gt),
9
+ date_to_value: params.dig(:q, :created_at_lt) %>
10
+
5
11
  <%= render 'spree/admin/shared/filters_button' %>
6
12
  </div>
7
13
  <div data-dropdown-target="menu" id="table-filter" class="hidden">
@@ -16,7 +22,7 @@
16
22
  <div class="form-group">
17
23
  <%= f.label :addresses_country_name_eq, Spree.t(:location) %>
18
24
  <%= tom_select_tag "q[addresses_country_name_eq]",
19
- active_option: params[:q][:addresses_country_name_eq],
25
+ active_option: params.dig(:q, :addresses_country_name_eq),
20
26
  options: Spree::Country.all.to_tom_select_json,
21
27
  value_field: :name,
22
28
  select_class: "w-100",
@@ -27,7 +33,7 @@
27
33
  <div class="form-group">
28
34
  <%= f.label :tags_name_in, Spree.t(:tags) %>
29
35
  <%= tom_select_tag "q[tags_name_in]",
30
- active_option: params[:q][:tags_name_in],
36
+ active_option: params.dig(:q, :tags_name_in),
31
37
  options: user_tags_json_array,
32
38
  multiple: true,
33
39
  value_field: :name,
@@ -39,7 +45,7 @@
39
45
  <div class="form-group">
40
46
  <%= f.label :accepts_email_marketing_eq, Spree.t(:accepts_email_marketing) %>
41
47
  <%= f.select :accepts_email_marketing_eq,
42
- options_for_select([["Yes", true], ["No", false]], params[:q][:accepts_email_marketing_eq]),
48
+ options_for_select([["Yes", true], ["No", false]], params.dig(:q, :accepts_email_marketing_eq)),
43
49
  { include_blank: true },
44
50
  { class: "custom-select", data: { filters_target: :input } } %>
45
51
  </div>
@@ -63,7 +63,7 @@
63
63
  </div>
64
64
  <% end %>
65
65
  </div>
66
- <%= render "spree/admin/shared/index_table_options", collection: @collection if @collection.any? %>
66
+ <%= render "spree/admin/shared/index_table_options", collection: @collection %>
67
67
  <% else %>
68
68
  <%= render "spree/admin/shared/no_resource_found" %>
69
69
  <% end %>
data/config/importmap.rb CHANGED
@@ -27,7 +27,6 @@ pin 'hotkeys-js', preload: ['application-spree-admin'] # @3.13.9
27
27
  pin 'stimulus-use', preload: ['application-spree-admin'] # @0.51.3
28
28
  pin 'stimulus-checkbox-select-all', preload: ['application-spree-admin'] # @5.3.0
29
29
  pin 'stimulus-clipboard', preload: ['application-spree-admin'] # @4.0.1
30
- pin "@stimulus-components/dropdown", to: "@stimulus-components--dropdown.js", preload: ['application-spree-admin'] # @3.0.0
31
30
  pin "@stimulus-components/dialog", to: "@stimulus-components--dialog.js", preload: ['application-spree-admin'] # @1.0.1
32
31
 
33
32
  # We can't vendor some of the javascript libraries
@@ -67,6 +67,7 @@ en:
67
67
  back_end: Only on admin panel
68
68
  both: On both admin panel & storefront
69
69
  front_end: Only on storefront
70
+ documentation: Documentation
70
71
  edit_billing_address: Edit billing address
71
72
  edit_contact_information: Edit contact information
72
73
  edit_profile: Edit Profile
@@ -228,6 +229,7 @@ en:
228
229
  shipment_transfer:
229
230
  wrong_destination: Wrong destination
230
231
  show_json: Show JSON
232
+ slack: Slack
231
233
  stock_transfers:
232
234
  add_products_tip: You need to select a destination location first
233
235
  store_credit:
@@ -0,0 +1,33 @@
1
+ require 'rails/generators'
2
+
3
+ module Spree
4
+ module Admin
5
+ module Generators
6
+ class DeviseGenerator < Rails::Generators::Base
7
+ desc 'Installs Spree Admin Devise controllers'
8
+
9
+ def install
10
+ # add devise routes
11
+ insert_into_file 'config/routes.rb', after: "Rails.application.routes.draw do\n" do
12
+ <<-ROUTES.strip_heredoc.indent!(2)
13
+ Spree::Core::Engine.add_routes do
14
+ # Admin authentication
15
+ devise_for(
16
+ Spree.admin_user_class.model_name.singular_route_key,
17
+ class_name: Spree.admin_user_class.to_s,
18
+ controllers: {
19
+ sessions: 'spree/admin/user_sessions',
20
+ passwords: 'spree/admin/user_passwords'
21
+ },
22
+ skip: :registrations,
23
+ path: :admin_user,
24
+ router_name: :spree
25
+ )
26
+ end
27
+ ROUTES
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,4 +1,4 @@
1
- <%%= search_form_for [:admin, search_collection], class: "filter-wrap", data: { controller: "filters dropdown" } do |f| %>
1
+ <%%= search_form_for [:admin, @search], class: "filter-wrap", data: { controller: "filters dropdown" } 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: :name_i_cont, label: Spree.t(:name) %>
4
4
  <%%= render 'spree/admin/shared/filters_button' %>
@@ -1,5 +1,5 @@
1
1
  <tr>
2
- <th scope="col"><%%= sort_link search_collection, :name, Spree.t(:name) %></th>
3
- <th scope="col"><%%= sort_link search_collection, :created_at, Spree.t(:created_at) %></th>
2
+ <th scope="col"><%%= sort_link @search, :name, Spree.t(:name) %></th>
3
+ <th scope="col"><%%= sort_link @search, :created_at, Spree.t(:created_at) %></th>
4
4
  <th scope="col"></th>
5
5
  </tr>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.2.0.rc1
4
+ version: 5.2.0.rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vendo Connect Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-11-04 00:00:00.000000000 Z
11
+ date: 2025-11-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree_core
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 5.2.0.rc1
19
+ version: 5.2.0.rc3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 5.2.0.rc1
26
+ version: 5.2.0.rc3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: spree_api
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 5.2.0.rc1
33
+ version: 5.2.0.rc3
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 5.2.0.rc1
40
+ version: 5.2.0.rc3
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: active_link_to
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -448,6 +448,7 @@ files:
448
448
  - app/javascript/spree/admin/controllers/codemirror_controller.js
449
449
  - app/javascript/spree/admin/controllers/color_palette_controller.js
450
450
  - app/javascript/spree/admin/controllers/color_picker_controller.js
451
+ - app/javascript/spree/admin/controllers/dropdown_controller.js
451
452
  - app/javascript/spree/admin/controllers/filters_controller.js
452
453
  - app/javascript/spree/admin/controllers/font_picker_controller.js
453
454
  - app/javascript/spree/admin/controllers/highlight_controller.js
@@ -1192,6 +1193,7 @@ files:
1192
1193
  - config/initializers/ransack.rb
1193
1194
  - config/locales/en.yml
1194
1195
  - config/routes.rb
1196
+ - lib/generators/spree/admin/devise/devise_generator.rb
1195
1197
  - lib/generators/spree/admin/install/install_generator.rb
1196
1198
  - lib/generators/spree/admin/install/templates/dev
1197
1199
  - lib/generators/spree/admin/scaffold/scaffold_generator.rb
@@ -1240,7 +1242,6 @@ files:
1240
1242
  - vendor/javascript/@rails--actiontext@7.2.201.js
1241
1243
  - vendor/javascript/@simonwep--pickr.js
1242
1244
  - vendor/javascript/@stimulus-components--dialog.js
1243
- - vendor/javascript/@stimulus-components--dropdown.js
1244
1245
  - vendor/javascript/@stimulus-components--rails-nested-form.js
1245
1246
  - vendor/javascript/bootstrap--dist--js--bootstrap.bundle.min.js.js
1246
1247
  - vendor/javascript/codemirror.js
@@ -1266,9 +1267,9 @@ licenses:
1266
1267
  - AGPL-3.0-or-later
1267
1268
  metadata:
1268
1269
  bug_tracker_uri: https://github.com/spree/spree/issues
1269
- changelog_uri: https://github.com/spree/spree/releases/tag/v5.2.0.rc1
1270
+ changelog_uri: https://github.com/spree/spree/releases/tag/v5.2.0.rc3
1270
1271
  documentation_uri: https://docs.spreecommerce.org/
1271
- source_code_uri: https://github.com/spree/spree/tree/v5.2.0.rc1
1272
+ source_code_uri: https://github.com/spree/spree/tree/v5.2.0.rc3
1272
1273
  post_install_message:
1273
1274
  rdoc_options: []
1274
1275
  require_paths:
@@ -1,4 +0,0 @@
1
- // @stimulus-components/dropdown@3.0.0 downloaded from https://ga.jspm.io/npm:@stimulus-components/dropdown@3.0.0/dist/stimulus-dropdown.mjs
2
-
3
- import{Controller as t}from"@hotwired/stimulus";import{useTransition as e}from"stimulus-use";const s=class _Dropdown extends t{connect(){e(this,{element:this.menuTarget})}toggle(){this.toggleTransition()}hide(t){!this.element.contains(t.target)&&!this.menuTarget.classList.contains("hidden")&&this.leave()}};s.targets=["menu"];let i=s;export{i as default};
4
-