spree_admin 5.1.0.beta3 → 5.1.0.rc1

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 (133) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/spree/admin/components/_badges.scss +4 -0
  3. data/app/assets/stylesheets/spree/admin/components/_buttons.scss +13 -2
  4. data/app/assets/stylesheets/spree/admin/components/_filters.scss +8 -1
  5. data/app/assets/stylesheets/spree/admin/components/_main.scss +14 -2
  6. data/app/assets/stylesheets/spree/admin/components/_media_form.scss +1 -1
  7. data/app/assets/stylesheets/spree/admin/components/_modals.scss +3 -1
  8. data/app/assets/stylesheets/spree/admin/components/_navbar.scss +1 -1
  9. data/app/assets/stylesheets/spree/admin/components/_tables.scss +6 -10
  10. data/app/assets/stylesheets/spree/admin/components/_variants_form.scss +1 -1
  11. data/app/assets/stylesheets/spree/admin/global/_variables.scss +13 -8
  12. data/app/assets/stylesheets/spree/admin/shared/_base.scss +5 -0
  13. data/app/controllers/concerns/spree/admin/order_breadcrumb_concern.rb +12 -0
  14. data/app/controllers/spree/admin/gift_card_batches_controller.rb +23 -0
  15. data/app/controllers/spree/admin/gift_cards_controller.rb +94 -0
  16. data/app/controllers/spree/admin/orders_controller.rb +20 -5
  17. data/app/controllers/spree/admin/payments_controller.rb +3 -0
  18. data/app/controllers/spree/admin/products_controller.rb +3 -3
  19. data/app/controllers/spree/admin/refunds_controller.rb +4 -0
  20. data/app/controllers/spree/admin/reimbursements_controller.rb +5 -1
  21. data/app/controllers/spree/admin/resource_controller.rb +12 -1
  22. data/app/controllers/spree/admin/search_controller.rb +22 -0
  23. data/app/controllers/spree/admin/store_credits_controller.rb +8 -5
  24. data/app/helpers/spree/admin/base_helper.rb +55 -0
  25. data/app/helpers/spree/admin/navigation_helper.rb +2 -2
  26. data/app/helpers/spree/admin/payments_helper.rb +0 -5
  27. data/app/helpers/spree/admin/products_helper.rb +1 -1
  28. data/app/helpers/spree/admin/promotion_rules_helper.rb +13 -1
  29. data/app/helpers/spree/admin/shipment_helper.rb +2 -0
  30. data/app/javascript/spree/admin/application.js +2 -0
  31. data/app/javascript/spree/admin/controllers/active_storage_upload_controller.js +2 -11
  32. data/app/javascript/spree/admin/controllers/multi_tom_select_controller.js +3 -2
  33. data/app/javascript/spree/admin/controllers/return_items_controller.js +6 -1
  34. data/app/javascript/spree/admin/controllers/sticky_controller.js +24 -0
  35. data/app/javascript/spree/admin/controllers/variants_form_controller.js +23 -17
  36. data/app/javascript/spree/admin/helpers/uppy_active_storage.js +15 -3
  37. data/app/views/active_storage/_upload_form.html.erb +3 -3
  38. data/app/views/spree/admin/coupon_codes/_coupon_code.html.erb +2 -6
  39. data/app/views/spree/admin/coupon_codes/index.csv.erb +1 -1
  40. data/app/views/spree/admin/custom_domains/edit.html.erb +2 -3
  41. data/app/views/spree/admin/custom_domains/new.html.erb +2 -3
  42. data/app/views/spree/admin/dashboard/_setup_progress.html.erb +2 -3
  43. data/app/views/spree/admin/dashboard/_store_preview.html.erb +3 -9
  44. data/app/views/spree/admin/gift_card_batches/_form.html.erb +30 -0
  45. data/app/views/spree/admin/gift_card_batches/new.html.erb +15 -0
  46. data/app/views/spree/admin/gift_cards/_filters.html.erb +43 -0
  47. data/app/views/spree/admin/gift_cards/_form.html.erb +30 -0
  48. data/app/views/spree/admin/gift_cards/_gift_card.html.erb +28 -0
  49. data/app/views/spree/admin/gift_cards/_list.html.erb +24 -0
  50. data/app/views/spree/admin/gift_cards/_table_filter_dropdown.html.erb +25 -0
  51. data/app/views/spree/admin/gift_cards/edit.html.erb +20 -0
  52. data/app/views/spree/admin/gift_cards/index.csv.erb +22 -0
  53. data/app/views/spree/admin/gift_cards/index.html.erb +41 -0
  54. data/app/views/spree/admin/gift_cards/new.html.erb +30 -0
  55. data/app/views/spree/admin/gift_cards/show.html.erb +199 -0
  56. data/app/views/spree/admin/integrations/new.html.erb +7 -4
  57. data/app/views/spree/admin/oauth_applications/edit.html.erb +2 -3
  58. data/app/views/spree/admin/oauth_applications/new.html.erb +2 -3
  59. data/app/views/spree/admin/orders/_customer.html.erb +5 -2
  60. data/app/views/spree/admin/orders/_payments.html.erb +1 -1
  61. data/app/views/spree/admin/orders/_return_authorizations.html.erb +3 -1
  62. data/app/views/spree/admin/orders/_shipment.html.erb +1 -1
  63. data/app/views/spree/admin/orders/_shipments.html.erb +1 -1
  64. data/app/views/spree/admin/orders/return_authorizations/_form.html.erb +13 -11
  65. data/app/views/spree/admin/page_sections/forms/_featured_posts.html.erb +0 -5
  66. data/app/views/spree/admin/pages/_form.html.erb +20 -26
  67. data/app/views/spree/admin/pages/new.html.erb +10 -4
  68. data/app/views/spree/admin/payments/_payment.html.erb +14 -9
  69. data/app/views/spree/admin/payments/new.html.erb +1 -1
  70. data/app/views/spree/admin/payments/source_forms/_gateway.html.erb +1 -1
  71. data/app/views/spree/admin/post_categories/edit.html.erb +2 -3
  72. data/app/views/spree/admin/post_categories/new.html.erb +2 -3
  73. data/app/views/spree/admin/preferences/_password_field.html.erb +2 -2
  74. data/app/views/spree/admin/products/edit.html.erb +2 -2
  75. data/app/views/spree/admin/promotion_actions/_promotion_action.html.erb +1 -1
  76. data/app/views/spree/admin/promotion_actions/edit.html.erb +2 -2
  77. data/app/views/spree/admin/promotion_rules/_promotion_rule.html.erb +26 -9
  78. data/app/views/spree/admin/promotion_rules/edit.html.erb +2 -2
  79. data/app/views/spree/admin/promotion_rules/forms/_option_value.html.erb +1 -1
  80. data/app/views/spree/admin/promotions/_actions.html.erb +2 -2
  81. data/app/views/spree/admin/promotions/_rules.html.erb +2 -2
  82. data/app/views/spree/admin/promotions/_sidebar.html.erb +5 -13
  83. data/app/views/spree/admin/properties/edit.html.erb +9 -5
  84. data/app/views/spree/admin/properties/new.html.erb +9 -5
  85. data/app/views/spree/admin/refunds/new.html.erb +5 -2
  86. data/app/views/spree/admin/reimbursement_types/edit.html.erb +2 -3
  87. data/app/views/spree/admin/reimbursement_types/new.html.erb +2 -4
  88. data/app/views/spree/admin/shared/_content_header.html.erb +9 -4
  89. data/app/views/spree/admin/shared/_edit_resource_links.html.erb +3 -1
  90. data/app/views/spree/admin/shared/_header.html.erb +2 -2
  91. data/app/views/spree/admin/shared/_index_table_options.html.erb +1 -1
  92. data/app/views/spree/admin/shared/_preferences.html.erb +1 -0
  93. data/app/views/spree/admin/shared/_sidebar.html.erb +1 -1
  94. data/app/views/spree/admin/shared/_user.html.erb +2 -7
  95. data/app/views/spree/admin/shared/named_types/_edit.html.erb +2 -3
  96. data/app/views/spree/admin/shared/named_types/_new.html.erb +2 -3
  97. data/app/views/spree/admin/shared/sidebar/_orders_nav.html.erb +1 -1
  98. data/app/views/spree/admin/shared/sortable_tree/_taxonomy.html.erb +1 -1
  99. data/app/views/spree/admin/shipping_categories/edit.html.erb +7 -4
  100. data/app/views/spree/admin/shipping_categories/new.html.erb +7 -6
  101. data/app/views/spree/admin/shipping_methods/form/_display.html.erb +23 -1
  102. data/app/views/spree/admin/stock_locations/_form.html.erb +35 -51
  103. data/app/views/spree/admin/stock_locations/edit.html.erb +8 -3
  104. data/app/views/spree/admin/stock_locations/new.html.erb +8 -5
  105. data/app/views/spree/admin/store_credit_events/_store_credit_event.html.erb +29 -0
  106. data/app/views/spree/admin/store_credits/_form.html.erb +13 -21
  107. data/app/views/spree/admin/store_credits/_list.html.erb +4 -24
  108. data/app/views/spree/admin/store_credits/_store_credit.html.erb +11 -0
  109. data/app/views/spree/admin/store_credits/edit.html.erb +16 -31
  110. data/app/views/spree/admin/store_credits/new.html.erb +14 -12
  111. data/app/views/spree/admin/store_credits/show.html.erb +145 -0
  112. data/app/views/spree/admin/stores/form/_basic.html.erb +26 -10
  113. data/app/views/spree/admin/tax_categories/_form.html.erb +1 -1
  114. data/app/views/spree/admin/tax_categories/edit.html.erb +7 -4
  115. data/app/views/spree/admin/tax_categories/new.html.erb +7 -4
  116. data/app/views/spree/admin/tax_rates/_form.html.erb +34 -32
  117. data/app/views/spree/admin/tax_rates/edit.html.erb +7 -4
  118. data/app/views/spree/admin/tax_rates/new.html.erb +7 -7
  119. data/app/views/spree/admin/taxonomies/edit.html.erb +2 -4
  120. data/app/views/spree/admin/taxonomies/new.html.erb +2 -2
  121. data/app/views/spree/admin/translations/edit.html.erb +2 -2
  122. data/app/views/spree/admin/translations/stores/_form.html.erb +2 -0
  123. data/app/views/spree/admin/users/_details.html.erb +1 -0
  124. data/app/views/spree/admin/users/index.html.erb +1 -1
  125. data/app/views/spree/admin/users/new.html.erb +9 -5
  126. data/app/views/spree/admin/users/show.html.erb +3 -3
  127. data/app/views/spree/admin/variants/form/_inventory.html.erb +1 -1
  128. data/app/views/spree/admin/zones/_form.html.erb +36 -40
  129. data/app/views/spree/admin/zones/edit.html.erb +7 -5
  130. data/app/views/spree/admin/zones/new.html.erb +7 -4
  131. data/config/locales/en.yml +12 -1
  132. data/config/routes.rb +8 -2
  133. metadata +28 -8
@@ -0,0 +1,24 @@
1
+ <% if @collection.any? %>
2
+ <div class="table-responsive" id="listing_gift_cards">
3
+ <table class="table">
4
+ <thead class="text-muted">
5
+ <tr>
6
+ <th><%= Spree.t(:code) %></th>
7
+ <th><%= Spree.t(:amount) %></th>
8
+ <th><%= Spree.t(:used) %></th>
9
+ <th><%= Spree.t(:currency) %></th>
10
+ <th><%= Spree.t(:status) %></th>
11
+ <th><%= Spree.t(:expires_at) %></th>
12
+ <th><%= Spree.t(:customer) %></th>
13
+ </tr>
14
+ </thead>
15
+ <tbody>
16
+ <%= render collection: @collection, partial: 'spree/admin/gift_cards/gift_card' %>
17
+ </tbody>
18
+ </table>
19
+ </div>
20
+ <%= render partial: 'spree/admin/shared/index_table_options', locals: { collection: @collection } %>
21
+ <% else %>
22
+ <% new_object_url = @user.present? ? spree.new_admin_user_gift_card_path(@user) : spree.new_admin_gift_card_path %>
23
+ <%= render 'spree/admin/shared/no_resource_found', model_class: Spree::GiftCard, new_object_url: new_object_url %>
24
+ <% end %>
@@ -0,0 +1,25 @@
1
+ <div class="dropdown">
2
+ <button class="btn btn-light dropdown-toggle" type="button" data-toggle="dropdown" data-display="static" data-flip="false" aria-expanded="false">
3
+ <span class="text-muted font-weight-normal">Show:</span>
4
+ <%= gift_cards_filter_dropdown_value %>
5
+ </button>
6
+ <div class="dropdown-menu w-100" style="min-width: 200px">
7
+
8
+ <%= active_link_to Spree.t('admin.gift_cards.all_statuses'), params.to_unsafe_h.deep_merge({page: nil, q: {status_eq: nil}}), class: 'dropdown-item', active: (params[:q] || {}).values_at(*%w[status_eq in_stock_items out_of_stock_items] ).all?(&:blank?) %>
9
+
10
+ <%= link_to Spree.t('admin.gift_cards.active'),
11
+ params.to_unsafe_h.deep_merge({page: nil, q: {status_eq: :active}}),
12
+ class: "dropdown-item #{'active' if params[:q] && params[:q][:status_eq] == 'active'}" %>
13
+
14
+ <%= link_to params.to_unsafe_h.deep_merge({page: nil, q: {status_eq: :expired}}),
15
+ class: "dropdown-item #{'active' if params[:q] && params[:q][:status_eq] == 'expired'}" do %>
16
+ <%= Spree.t(:expired) %>
17
+ <% end %>
18
+
19
+ <%= link_to params.to_unsafe_h.deep_merge({page: nil, q: {status_eq: :redeemed}}),
20
+ class: "dropdown-item #{'active' if params[:q] && params[:q][:status_eq] == 'redeemed'}" do %>
21
+ <%= Spree.t('admin.gift_cards.redeemed') %>
22
+ <% end %>
23
+
24
+ </div>
25
+ </div>
@@ -0,0 +1,20 @@
1
+ <%= turbo_frame_tag :gift_card_settings do %>
2
+ <%= form_for [:admin, @user, @object] do |f| %>
3
+ <div class="card">
4
+ <div class="card-header d-flex justify-content-between">
5
+ <h5 class="card-title">
6
+ <%= Spree.t(:settings) %>
7
+ </h5>
8
+ </div>
9
+ <div class="card-body">
10
+ <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @object } %>
11
+ <%= render 'form', f: f %>
12
+ </div>
13
+ <div class="card-footer d-flex justify-content-between">
14
+ <%= turbo_save_button_tag Spree.t('actions.update') %>
15
+
16
+ <%= link_to Spree.t('actions.discard'), spree.admin_gift_card_path(@object), class: 'btn btn-light' %>
17
+ </div>
18
+ </div>
19
+ <% end %>
20
+ <% end %>
@@ -0,0 +1,22 @@
1
+ <%- headers = [
2
+ Spree.t(:code),
3
+ Spree.t(:amount),
4
+ Spree.t(:used),
5
+ Spree.t(:currency),
6
+ Spree.t(:status),
7
+ Spree.t(:expires_at),
8
+ Spree.t(:customer)
9
+ ]
10
+ -%>
11
+ <%= CSV.generate_line(headers).strip %>
12
+ <%- @collection.find_each do |gift_card| -%>
13
+ <%= CSV.generate_line([
14
+ gift_card.display_code,
15
+ gift_card.display_amount,
16
+ gift_card.display_amount_used,
17
+ gift_card.currency,
18
+ gift_card.display_state,
19
+ gift_card.expires_at,
20
+ gift_card.user&.email,
21
+ ]).strip %>
22
+ <%- end -%>
@@ -0,0 +1,41 @@
1
+ <% unless turbo_frame_request? %>
2
+ <% content_for :page_title do %>
3
+ <%= Spree.t(:gift_cards) %>
4
+ <% end %>
5
+
6
+ <% content_for :page_actions do %>
7
+ <%= link_to spree.admin_gift_cards_path(q: params[:q].to_unsafe_hash, per_page: params[:per_page], format: :csv), id: 'gift-card-batch-export-link', class: 'btn btn-light bg-transparent with-tip', title: 'Export gift cards to a CSV file' do %>
8
+ <%= icon 'table-export', class: 'mr-2' %>
9
+ <%= Spree.t(:export) %>
10
+ <% end %>
11
+
12
+ <div class="dropdown" id="page_actions_dropdown">
13
+ <%= link_to_with_icon 'plus', Spree.t(:new_gift_card), '#', class: 'text-nowrap btn btn-primary align-self-center', data: { toggle: 'dropdown' }, id: 'more-actions-link' %>
14
+ <div class="dropdown-menu dropdown-menu-right">
15
+ <%= link_to spree.new_admin_gift_card_path,
16
+ class: 'text-left dropdown-item' do %>
17
+ <%= icon 'add' %>
18
+ <%= Spree.t(:gift_card) %>
19
+ <% end %>
20
+
21
+ <%= link_to spree.new_admin_gift_card_batch_path,
22
+ class: 'text-left dropdown-item' do %>
23
+ <%= icon 'add' %>
24
+ <%= Spree.t(:gift_card_batch) %>
25
+ <% end %>
26
+ </div>
27
+ </div>
28
+ <% end %>
29
+ <% end %>
30
+
31
+ <div class="card-lg p-0">
32
+ <% if params[:frame_name].present? %>
33
+ <%= turbo_frame_tag params[:frame_name], autoscroll: true, data: { autoscroll_block: :nearest, autoscroll_behavior: :smooth } do %>
34
+ <%= render 'filters', frame_name: params[:frame_name] %>
35
+ <%= render 'list' %>
36
+ <% end %>
37
+ <% else %>
38
+ <%= render 'filters' %>
39
+ <%= render 'list' %>
40
+ <% end %>
41
+ </div>
@@ -0,0 +1,30 @@
1
+ <% content_for :page_title do %>
2
+ <% if @user.present? %>
3
+ <%= page_header_back_button spree.admin_user_path(@user) %>
4
+ <% else %>
5
+ <%= page_header_back_button spree.admin_gift_cards_path %>
6
+ <% end %>
7
+
8
+ <%= Spree.t(:new_gift_card) %>
9
+ <% end %>
10
+
11
+ <% url = @user.present? ? spree.admin_user_gift_cards_path(@user) : spree.admin_gift_cards_path %>
12
+
13
+ <%= form_for @object, url: url do |f| %>
14
+ <div class="row">
15
+ <div class="col-lg-6 offset-lg-3">
16
+ <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @object } %>
17
+ <div class="card mb-4">
18
+ <div class="card-header">
19
+ <h5 class="card-title">
20
+ <%= Spree.t(:new_gift_card) %>
21
+ </h5>
22
+ </div>
23
+ <div class="card-body">
24
+ <%= render 'form', f: f %>
25
+ </div>
26
+ </div>
27
+ <%= render 'spree/admin/shared/new_resource_links' %>
28
+ </div>
29
+ </div>
30
+ <% end %>
@@ -0,0 +1,199 @@
1
+ <% content_for :page_title do %>
2
+ <% if @user.present? %>
3
+ <%= page_header_back_button spree.admin_user_path(@user) %>
4
+ <% else %>
5
+ <%= page_header_back_button spree.admin_gift_cards_path %>
6
+ <% end %>
7
+
8
+ <%= @object.code.upcase %>
9
+ <span class="badge">
10
+ <%= active_badge(@object.active?, label: @object.display_state, class: 'badge-sm') %>
11
+ </span>
12
+ <% end %>
13
+
14
+ <% content_for :title do %>
15
+ <%= Spree.t(:gift_card) %>
16
+ <%= @object.code.upcase %>
17
+ <% end %>
18
+
19
+ <div class="row">
20
+ <div class="col-md-8">
21
+
22
+ <div class="card mb-4">
23
+ <div class="card-header d-flex justify-content-between align-items-center">
24
+ <h5 class="card-title">
25
+ <%= Spree.t('admin.gift_cards.usage') %>
26
+ </h5>
27
+ </div>
28
+ <div class="card-body border-bottom">
29
+ <div class="d-flex justify-content-between align-items-center">
30
+ <div class="w-75">
31
+ <%= progress_bar_component(@object.amount_used, max: @object.amount) %>
32
+ </div>
33
+ <div class="w-25 text-right">
34
+ <%= @object.display_amount_used %> <%= Spree.t(:used).downcase %> / <%= @object.display_amount %>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ <div class="card-body p-0">
39
+ <% if @orders.any? %>
40
+ <div class="table-responsive">
41
+ <table class="table">
42
+ <thead>
43
+ <tr>
44
+ <th><%= Spree.t(:order) %></th>
45
+ <th><%= Spree.t(:status) %></th>
46
+ <th><%= Spree.t(:customer) %></th>
47
+ <th class="text-right"><%= I18n.t('activerecord.attributes.spree/gift_card.amount_used') %></th>
48
+ <th class="text-right"><%= Spree.t(:total) %></th>
49
+ </tr>
50
+ </thead>
51
+ <tbody>
52
+ <% @orders.each do |order| %>
53
+ <tr>
54
+ <td>
55
+ <%= link_to order.number, spree.edit_admin_order_path(order), class: 'text-dark font-weight-bold' %>
56
+ </td>
57
+ <td>
58
+ <% if order.completed? %>
59
+ <span class="badge badge-success">
60
+ <%= icon('check') %>
61
+ <%= Spree.t("state_machine_states.completed") %>
62
+ </span>
63
+ <% else %>
64
+ <span class="badge badge-warning">
65
+ <%= Spree.t("state_machine_states.#{order.state}") %>
66
+ </span>
67
+ <% end %>
68
+ </td>
69
+ <td>
70
+ <%= order.user.email %>
71
+ </td>
72
+ <td class="text-right">
73
+ <%= order.display_gift_card_total %>
74
+ </td>
75
+ <td class="text-right">
76
+ <%= order.display_total %>
77
+ </td>
78
+ </tr>
79
+ <% end %>
80
+ </tbody>
81
+ </table>
82
+ </div>
83
+ <% else %>
84
+ <%= render 'spree/admin/shared/no_resource_found', resource_name: Spree.t(:order), new_object_url: nil %>
85
+ <% end %>
86
+ </div>
87
+ </div>
88
+
89
+ </div>
90
+
91
+ <div class="col-md-4">
92
+ <%= turbo_frame_tag :gift_card_settings do %>
93
+ <div class="card">
94
+ <div class="card-header d-flex justify-content-between">
95
+ <h5 class="card-title">
96
+ <%= Spree.t(:settings) %>
97
+ </h5>
98
+ <%= link_to_with_icon 'edit', Spree.t(:edit), spree.edit_admin_gift_card_path(@object), icon: 'pencil', class: 'btn btn-sm btn-light', if: @gift_card.editable? %>
99
+ </div>
100
+ <div class="card-body p-0">
101
+ <ul class="list-group list-group-flush">
102
+ <li class="list-group-item d-flex justify-content-between align-items-center">
103
+ <span class="text-muted">
104
+ <%= Spree.t(:code) %>
105
+ </span>
106
+ <span>
107
+ <code><%= @object.display_code %></code>
108
+ <%= clipboard_component(@object.display_code) %>
109
+ </span>
110
+ </li>
111
+
112
+ <li class="list-group-item d-flex justify-content-between align-items-center">
113
+ <span class="text-muted">
114
+ <%= Spree.t(:customer) %>
115
+ </span>
116
+ <span>
117
+ <% if @object.user %>
118
+ <%= link_to @object.user.email, spree.admin_user_path(@object.user), data: { turbo_frame: '_top' } %>
119
+ <% else %>
120
+ <span class="text-muted">
121
+ <%= Spree.t(:not_available) %>
122
+ </span>
123
+ <% end %>
124
+ </span>
125
+ </li>
126
+
127
+ <li class="list-group-item d-flex justify-content-between align-items-center">
128
+ <span class="text-muted">
129
+ <%= Spree.t(:amount) %>
130
+ </span>
131
+ <span>
132
+ <%= @object.display_amount %>
133
+ </span>
134
+ </li>
135
+ <li class="list-group-item d-flex justify-content-between align-items-center">
136
+ <span class="text-muted">
137
+ <%= Spree.t(:used) %>
138
+ </span>
139
+ <span>
140
+ <%= @object.display_amount_used %>
141
+ </span>
142
+ </li>
143
+
144
+ <li class="list-group-item d-flex justify-content-between align-items-center">
145
+ <span class="text-muted">
146
+ <%= Spree.t('store_credit.remaining') %>
147
+ </span>
148
+ <span>
149
+ <%= @object.display_amount_remaining %>
150
+ </span>
151
+ </li>
152
+
153
+ <li class="list-group-item d-flex justify-content-between align-items-center">
154
+ <span class="text-muted">
155
+ <%= Spree.t(:currency) %>
156
+ </span>
157
+ <span>
158
+ <%= @object.currency %>
159
+ </span>
160
+ </li>
161
+
162
+ <li class="list-group-item d-flex justify-content-between align-items-center">
163
+ <span class="text-muted">
164
+ <%= Spree.t(:expires_at) %>
165
+ </span>
166
+ <% if @object.expires_at %>
167
+ <span><%= local_time(@object.expires_at) %></span>
168
+ <% else %>
169
+ <span class="text-muted"><%= Spree.t(:not_available) %></span>
170
+ <% end %>
171
+ </li>
172
+
173
+ <li class="list-group-item d-flex justify-content-between align-items-center">
174
+ <span class="text-muted">
175
+ <%= Spree.t(:created_by) %>
176
+ </span>
177
+ <span>
178
+ <% if @object.created_by %>
179
+ <%= link_to @object.created_by.email, spree.admin_admin_user_path(@object.created_by), data: { turbo_frame: '_top' } %>
180
+ <% else %>
181
+ <span class="text-muted">
182
+ <%= Spree.t(:not_available) %>
183
+ </span>
184
+ <% end %>
185
+ </span>
186
+ </li>
187
+
188
+ <li class="list-group-item d-flex justify-content-between align-items-center">
189
+ <span class="text-muted">
190
+ <%= Spree.t(:created_at) %>
191
+ </span>
192
+ <span><%= local_time(@object.created_at) %></span>
193
+ </li>
194
+ </ul>
195
+ </div>
196
+ </div>
197
+ <% end %>
198
+ </div>
199
+ </div>
@@ -3,12 +3,15 @@
3
3
  <%= Spree.t('actions.connect') %> <%= @integration.name %>
4
4
  <% end %>
5
5
 
6
- <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @integration } %>
7
-
8
6
  <%= form_for @integration, as: :integration, url: spree.admin_integrations_path do |form| %>
9
7
  <%= form.hidden_field :type %>
10
8
  <%= form.hidden_field :active, value: true %>
11
9
 
12
- <%= render "spree/admin/integrations/forms/#{@integration.key}", form: form %>
13
- <%= render 'spree/admin/shared/new_resource_links' %>
10
+ <div class="row">
11
+ <div class="col-lg-6 offset-lg-3">
12
+ <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @integration } %>
13
+ <%= render "spree/admin/integrations/forms/#{@integration.key}", form: form %>
14
+ <%= render 'spree/admin/shared/new_resource_links' %>
15
+ </div>
16
+ </div>
14
17
  <% end %>
@@ -3,11 +3,10 @@
3
3
  <%= @oauth_application.name.capitalize %>
4
4
  <% end %>
5
5
 
6
- <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @oauth_application } %>
7
-
8
6
  <div class="row">
9
- <div class="col-lg-6">
7
+ <div class="col-lg-6 offset-lg-3">
10
8
  <%= form_for [:admin, @oauth_application] do |f| %>
9
+ <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @oauth_application } %>
11
10
  <div class="card mb-4">
12
11
  <div class="card-body">
13
12
  <%= render 'form', f: f %>
@@ -7,10 +7,9 @@
7
7
  <%= Spree.t('admin.oauth_applications.new') %>
8
8
  <% end %>
9
9
 
10
- <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @oauth_application } %>
11
-
12
10
  <div class="row">
13
- <div class="col-lg-6">
11
+ <div class="col-lg-6 offset-lg-3">
12
+ <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @oauth_application } %>
14
13
  <%= turbo_frame_tag 'new_oauth_application' do %>
15
14
  <%= form_for [:admin, @oauth_application] do |f| %>
16
15
  <div class="card mb-4">
@@ -5,7 +5,7 @@
5
5
  </h5>
6
6
  <% if can?(:update_customer, @order) || can?(:update_addresses, @order) %>
7
7
  <div class="dropdown ml-auto" id="customer-edit-dropdown">
8
- <%= link_to_with_icon 'dots-vertical', nil, '#', class: 'btn btn-light btn-sm px-2', data: { toggle: 'dropdown', test_id: 'dropdown-toggle' } %>
8
+ <%= link_to_with_icon 'dots-vertical', nil, '#', class: 'btn btn-light btn-sm px-1', data: { toggle: 'dropdown', test_id: 'dropdown-toggle' } %>
9
9
  <div class="dropdown-menu dropdown-menu-right" >
10
10
  <div data-toggle="modal" data-target="#modal">
11
11
  <% if can?(:update_customer, @order) && !@order.user.present? %>
@@ -37,7 +37,10 @@
37
37
  <%= render 'spree/admin/shared/user', user: @order.user %>
38
38
  <%= render 'spree/admin/orders/user_overview', user: @order.user %>
39
39
  <% elsif @order.email.present? %>
40
- <%= mail_to truncate(@order.email, length: 35), class: 'text-dark with-tip', title: @order.email %>
40
+ <div class="d-flex align-items-center w-100">
41
+ <%= mail_to @order.email, @order.email, class: 'text-blue' %>
42
+ <%= clipboard_component(@order.email) %>
43
+ </div>
41
44
  <% else %>
42
45
  <span class="text-muted">
43
46
  <%= Spree.t(:no_email_provided) %>
@@ -10,7 +10,7 @@
10
10
  <%= order_payment_state(@order, class: "ml-auto") %>
11
11
  <% end %>
12
12
  </div>
13
- <div class="card-body d-flex flex-column gap-2 px-1 pt-0 pb-1">
13
+ <div class="card-body d-flex flex-column gap-2 px-2 pt-0 pb-2">
14
14
  <%= render collection: @payments, partial: 'spree/admin/payments/payment', as: :payment %>
15
15
 
16
16
  <% if @order.payment_total < @order.total && can?(:create, Spree::Payment.new(order: @order)) %>
@@ -17,7 +17,9 @@
17
17
  </tr>
18
18
  </thead>
19
19
  <tbody>
20
- <%= render partial: 'spree/admin/orders/return_authorizations/return_authorization', collection: @return_authorizations, cached: spree_base_cache_scope %>
20
+ <%= render partial: "spree/admin/orders/return_authorizations/return_authorization",
21
+ collection: @return_authorizations,
22
+ cached: ->(r) { [spree_base_cache_key, r.cache_key_with_version, r.return_items.maximum(:updated_at)] } %>
21
23
  </tbody>
22
24
  </table>
23
25
  </div>
@@ -65,7 +65,7 @@
65
65
  <strong><%= Spree.t(:tracking) %>: </strong>
66
66
  <% if shipment.tracked? %>
67
67
  <% if shipment.tracking_url.present? %>
68
- <span><%= link_to ERB::Util.html_escape(shipment.tracking), ERB::Util.html_escape(shipment.tracking_url), target: '_blank', rel: "noopener noreferrer" %></span>
68
+ <span><%= shipment_tracking_link_to(shipment: shipment, html_options: { target: '_blank', rel: 'noopener noreferrer' }) %></span>
69
69
  <% elsif shipment.tracking.present? %>
70
70
  <span><%= shipment.tracking %></span>
71
71
  <% end %>
@@ -10,7 +10,7 @@
10
10
  <%= order_shipment_state(@order, class: "ml-auto") %>
11
11
  <% end %>
12
12
  </div>
13
- <div class="card-body px-1 pt-0 pb-1 d-flex flex-column gap-2">
13
+ <div class="card-body px-2 pt-0 pb-2 d-flex flex-column gap-2">
14
14
  <% if @shipments.any? %>
15
15
  <%= render partial: "shipment", collection: @shipments %>
16
16
  <% else %>
@@ -68,9 +68,9 @@
68
68
  <td><%= inventory_unit.state.humanize %></td>
69
69
  <td
70
70
  class="charged-amount"
71
- data-charged-amount="<%= return_item.pre_tax_amount %>"
71
+ data-charged-amount="<%= inventory_unit.charged_amount %>"
72
72
  >
73
- <%= return_item.display_pre_tax_amount %>
73
+ <%= inventory_unit.display_charged_amount %>
74
74
  </td>
75
75
  <td class="purchased-quantity">
76
76
  <%= inventory_unit.quantity %>
@@ -81,6 +81,7 @@
81
81
  {
82
82
  class: "refund-quantity-input form-control",
83
83
  min: 0,
84
+ required: true,
84
85
  data: {
85
86
  action: "return-items#updateSuggestedAmount",
86
87
  },
@@ -93,12 +94,13 @@
93
94
  <td>
94
95
  <% if editable %>
95
96
  <%= item_fields.text_field :pre_tax_amount,
96
- {
97
- class: "refund-amount-input form-control",
98
- data: {
99
- action: "return-items#updateTotalRefundAmount",
100
- },
101
- } %>
97
+ {
98
+ class: "refund-amount-input form-control",
99
+ required: true,
100
+ data: {
101
+ action: "return-items#updateTotalRefundAmount",
102
+ },
103
+ } %>
102
104
  <% else %>
103
105
  <%= return_item.display_pre_tax_amount %>
104
106
  <% end %>
@@ -153,9 +155,9 @@
153
155
  <div class="form-group">
154
156
  <%= f.label :reason, raw(Spree.t(:reason) + required_span_tag) %>
155
157
  <%= f.select :return_authorization_reason_id,
156
- @reasons.collect { |r| [r.name, r.id] },
157
- { include_blank: Spree.t(:select_a_return_authorization_reason) },
158
- { class: "custom-select" } %>
158
+ @reasons.collect { |r| [r.name, r.id] },
159
+ { include_blank: Spree.t(:select_a_return_authorization_reason) },
160
+ { class: "custom-select" } %>
159
161
  <%= f.error_message_on :reason %>
160
162
  </div>
161
163
 
@@ -21,11 +21,6 @@
21
21
  <%= f.select :preferred_description_alignment, options_for_select([ ["Left", "left"], ["Center", "center"], ["Right", "right"] ], @page_section.preferred_description_alignment ), {}, data: { action: 'auto-submit#submit' }, class: "custom-select" %>
22
22
  </div>
23
23
 
24
- <div class="form-group">
25
- <%= f.label :preferred_posts_to_show, Spree.t('admin.page_builder.posts_to_show') %>
26
- <%= f.select :preferred_posts_to_show, options_for_select([["Newest", "newest"], ["Most popular", "most_popular"]], @page_section.preferred_posts_to_show), {}, data: { action: 'auto-submit#submit' }, class: "custom-select" %>
27
- </div>
28
-
29
24
  <div class="form-group">
30
25
  <div data-controller="better-slider">
31
26
  <label><%= Spree.t('admin.page_builder.maximum_posts_to_show') %>: <span data-better-slider-target="currentValueLabel"></span></label>
@@ -1,29 +1,23 @@
1
- <% vertical ||= false %>
2
- <div class="row">
3
- <div class="<%= vertical ? 'col-lg-12' : 'col-lg-8' %>">
4
- <div class="card mb-4">
5
- <div class="card-header d-flex align-items-center justify-content-between">
6
- <h5 class="card-title">
7
- <%= Spree.t(:details) %>
8
- </h5>
9
- </div>
10
- <div class="card-body">
11
- <div class="form-group">
12
- <%= f.label :name, Spree.t(:name) %>
13
- <%= f.text_field :name, class: 'form-control', required: true, data: { slug_form_target: :name, action: 'slug-form#updateUrlFromName', seo_form_target: 'sourceTitleInput' }, autofocus: true %>
14
- </div>
15
- </div>
16
- </div>
1
+ <div class="card mb-4">
2
+ <div class="card-header d-flex align-items-center justify-content-between">
3
+ <h5 class="card-title">
4
+ <%= Spree.t(:details) %>
5
+ </h5>
17
6
  </div>
18
- <div class="<%= vertical ? 'col-lg-12' : 'col-lg-4' %>">
19
- <%= render 'spree/admin/shared/seo',
20
- f: f,
21
- title: @page.name,
22
- meta_title: @page.meta_title,
23
- description: nil,
24
- slug_attribute_name: "page[slug]",
25
- slug: @page.slug,
26
- slug_path: 'pages',
27
- placeholder: 'Add a title to see how this page might appear in a search engine listing' %>
7
+ <div class="card-body">
8
+ <div class="form-group">
9
+ <%= f.label :name, Spree.t(:name) %>
10
+ <%= f.text_field :name, class: 'form-control', required: true, data: { slug_form_target: :name, action: 'slug-form#updateUrlFromName', seo_form_target: 'sourceTitleInput' }, autofocus: true %>
11
+ </div>
28
12
  </div>
29
13
  </div>
14
+ <%= render 'spree/admin/shared/seo',
15
+ f: f,
16
+ title: @page.name,
17
+ meta_title: @page.meta_title,
18
+ description: nil,
19
+ slug_attribute_name: "page[slug]",
20
+ slug: @page.slug,
21
+ slug_path: 'pages',
22
+ placeholder: 'Add a title to see how this page might appear in a search engine listing' %>
23
+
@@ -5,7 +5,13 @@
5
5
  <% content_for :title do %>
6
6
  <%= Spree.t(:new_page) %>
7
7
  <% end %>
8
- <%= form_with model: @page, url: spree.admin_pages_path, data: { controller: 'slug-form seo-form' }, scope: :page do |f| %>
9
- <%= render 'form', f: f, vertical: false %>
10
- <%= render 'spree/admin/shared/new_resource_links', f: f %>
11
- <% end %>
8
+
9
+ <div class="row">
10
+ <div class="col-lg-6 offset-lg-3">
11
+ <%= form_with model: @page, url: spree.admin_pages_path, data: { controller: 'slug-form seo-form' }, scope: :page do |f| %>
12
+ <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @page } %>
13
+ <%= render 'form', f: f, vertical: false %>
14
+ <%= render 'spree/admin/shared/new_resource_links', f: f %>
15
+ <% end %>
16
+ </div>
17
+ </div>