solidus_admin 0.2.0 → 0.3.1

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 (189) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +60 -6
  3. data/Rakefile +1 -0
  4. data/app/assets/builds/solidus_admin/tailwind.css +198 -163
  5. data/app/assets/stylesheets/solidus_admin/dark.css +1 -0
  6. data/app/assets/stylesheets/solidus_admin/dimmed.css +1 -0
  7. data/app/components/solidus_admin/adjustment_reasons/edit/component.html.erb +27 -0
  8. data/app/components/solidus_admin/adjustment_reasons/edit/component.rb +12 -0
  9. data/app/components/solidus_admin/adjustment_reasons/edit/component.yml +8 -0
  10. data/app/components/solidus_admin/adjustment_reasons/index/component.rb +19 -2
  11. data/app/components/solidus_admin/adjustment_reasons/new/component.html.erb +28 -0
  12. data/app/components/solidus_admin/adjustment_reasons/new/component.rb +12 -0
  13. data/app/components/solidus_admin/adjustment_reasons/new/component.yml +8 -0
  14. data/app/components/solidus_admin/base_component.rb +0 -25
  15. data/app/components/solidus_admin/option_types/index/component.rb +1 -1
  16. data/app/components/solidus_admin/orders/index/component.rb +8 -8
  17. data/app/components/solidus_admin/orders/index/component.yml +1 -0
  18. data/app/components/solidus_admin/orders/show/address/component.html.erb +56 -54
  19. data/app/components/solidus_admin/orders/show/adjustments/index/adjustable/component.rb +27 -0
  20. data/app/components/solidus_admin/orders/show/adjustments/index/adjustable/spree_line_item/component.rb +14 -0
  21. data/app/components/solidus_admin/orders/show/adjustments/index/adjustable/spree_order/component.rb +11 -0
  22. data/app/components/solidus_admin/orders/show/adjustments/index/adjustable/spree_shipment/component.rb +15 -0
  23. data/app/components/solidus_admin/orders/show/adjustments/index/component.rb +147 -0
  24. data/app/components/solidus_admin/orders/show/adjustments/index/component.yml +21 -0
  25. data/app/components/solidus_admin/orders/show/adjustments/index/source/component.rb +26 -0
  26. data/app/components/solidus_admin/orders/show/adjustments/index/source/spree_tax_rate/component.rb +17 -0
  27. data/app/components/solidus_admin/orders/show/adjustments/index/source/spree_unit_cancel/component.rb +7 -0
  28. data/app/components/solidus_admin/orders/show/component.html.erb +7 -3
  29. data/app/components/solidus_admin/orders/show/component.rb +8 -0
  30. data/app/components/solidus_admin/orders/show/email/component.html.erb +18 -13
  31. data/app/components/solidus_admin/orders/show/email/component.rb +0 -4
  32. data/app/components/solidus_admin/orders/show/summary/component.html.erb +1 -1
  33. data/app/components/solidus_admin/payment_methods/index/component.rb +1 -1
  34. data/app/components/solidus_admin/products/index/component.rb +8 -5
  35. data/app/components/solidus_admin/products/show/component.html.erb +14 -3
  36. data/app/components/solidus_admin/products/status/component.rb +4 -1
  37. data/app/components/solidus_admin/products/status/component.yml +1 -0
  38. data/app/components/solidus_admin/properties/index/component.rb +1 -1
  39. data/app/components/solidus_admin/refund_reasons/edit/component.html.erb +27 -0
  40. data/app/components/solidus_admin/refund_reasons/edit/component.rb +12 -0
  41. data/app/components/solidus_admin/refund_reasons/edit/component.yml +8 -0
  42. data/app/components/solidus_admin/refund_reasons/index/component.rb +11 -4
  43. data/app/components/solidus_admin/refund_reasons/new/component.html.erb +27 -0
  44. data/app/components/solidus_admin/refund_reasons/new/component.rb +12 -0
  45. data/app/components/solidus_admin/refund_reasons/new/component.yml +6 -0
  46. data/app/components/solidus_admin/return_reasons/edit/component.html.erb +26 -0
  47. data/app/components/solidus_admin/return_reasons/edit/component.rb +12 -0
  48. data/app/components/solidus_admin/return_reasons/edit/component.yml +8 -0
  49. data/app/components/solidus_admin/return_reasons/index/component.rb +20 -2
  50. data/app/components/solidus_admin/return_reasons/new/component.html.erb +27 -0
  51. data/app/components/solidus_admin/return_reasons/new/component.rb +12 -0
  52. data/app/components/solidus_admin/return_reasons/new/component.yml +8 -0
  53. data/app/components/solidus_admin/roles/edit/component.html.erb +33 -0
  54. data/app/components/solidus_admin/roles/edit/component.rb +20 -0
  55. data/app/components/solidus_admin/roles/edit/component.yml +19 -0
  56. data/app/components/solidus_admin/roles/index/component.rb +70 -0
  57. data/app/components/solidus_admin/roles/index/component.yml +6 -0
  58. data/app/components/solidus_admin/roles/new/component.html.erb +33 -0
  59. data/app/components/solidus_admin/roles/new/component.rb +20 -0
  60. data/app/components/solidus_admin/roles/new/component.yml +19 -0
  61. data/app/components/solidus_admin/shipping_categories/edit/component.html.erb +16 -0
  62. data/app/components/solidus_admin/shipping_categories/edit/component.rb +12 -0
  63. data/app/components/solidus_admin/shipping_categories/edit/component.yml +6 -0
  64. data/app/components/solidus_admin/shipping_categories/index/component.rb +20 -3
  65. data/app/components/solidus_admin/shipping_categories/new/component.html.erb +17 -0
  66. data/app/components/solidus_admin/shipping_categories/new/component.rb +12 -0
  67. data/app/components/solidus_admin/shipping_categories/new/component.yml +6 -0
  68. data/app/components/solidus_admin/shipping_methods/index/component.rb +2 -2
  69. data/app/components/solidus_admin/stock_items/edit/component.html.erb +66 -72
  70. data/app/components/solidus_admin/stock_items/edit/component.rb +0 -5
  71. data/app/components/solidus_admin/stock_items/index/component.rb +5 -6
  72. data/app/components/solidus_admin/stock_locations/index/component.rb +1 -1
  73. data/app/components/solidus_admin/store_credit_reasons/edit/component.html.erb +26 -0
  74. data/app/components/solidus_admin/store_credit_reasons/edit/component.rb +12 -0
  75. data/app/components/solidus_admin/store_credit_reasons/edit/component.yml +8 -0
  76. data/app/components/solidus_admin/store_credit_reasons/index/component.rb +11 -4
  77. data/app/components/solidus_admin/store_credit_reasons/new/component.html.erb +27 -0
  78. data/app/components/solidus_admin/store_credit_reasons/new/component.rb +12 -0
  79. data/app/components/solidus_admin/store_credit_reasons/new/component.yml +8 -0
  80. data/app/components/solidus_admin/stores/index/component.rb +1 -1
  81. data/app/components/solidus_admin/tax_categories/edit/component.html.erb +28 -0
  82. data/app/components/solidus_admin/tax_categories/edit/component.rb +12 -0
  83. data/app/components/solidus_admin/tax_categories/edit/component.yml +8 -0
  84. data/app/components/solidus_admin/tax_categories/index/component.rb +11 -4
  85. data/app/components/solidus_admin/tax_categories/new/component.html.erb +28 -0
  86. data/app/components/solidus_admin/tax_categories/new/component.rb +12 -0
  87. data/app/components/solidus_admin/tax_categories/new/component.yml +8 -0
  88. data/app/components/solidus_admin/tax_rates/index/component.rb +3 -3
  89. data/app/components/solidus_admin/taxonomies/index/component.rb +1 -1
  90. data/app/components/solidus_admin/ui/button/component.rb +1 -1
  91. data/app/components/solidus_admin/ui/checkbox_row/component.html.erb +29 -0
  92. data/app/components/solidus_admin/ui/checkbox_row/component.rb +11 -0
  93. data/app/components/solidus_admin/ui/forms/address/component.html.erb +27 -9
  94. data/app/components/solidus_admin/ui/forms/address/component.js +38 -13
  95. data/app/components/solidus_admin/ui/forms/search/component.html.erb +2 -3
  96. data/app/components/solidus_admin/ui/forms/search/component.js +3 -3
  97. data/app/components/solidus_admin/ui/modal/component.html.erb +7 -7
  98. data/app/components/solidus_admin/ui/modal/component.js +7 -0
  99. data/app/components/solidus_admin/ui/modal/component.rb +1 -1
  100. data/app/components/solidus_admin/ui/pages/index/component.html.erb +17 -3
  101. data/app/components/solidus_admin/ui/pages/index/component.rb +29 -43
  102. data/app/components/solidus_admin/ui/panel/component.html.erb +5 -16
  103. data/app/components/solidus_admin/ui/panel/component.rb +11 -7
  104. data/app/components/solidus_admin/ui/table/component.js +31 -2
  105. data/app/components/solidus_admin/ui/table/component.rb +23 -7
  106. data/app/components/solidus_admin/ui/table/component.yml +1 -0
  107. data/app/components/solidus_admin/ui/thumbnail/component.rb +1 -1
  108. data/app/components/solidus_admin/ui/thumbnail_with_caption/component.html.erb +17 -0
  109. data/app/components/solidus_admin/ui/thumbnail_with_caption/component.rb +15 -0
  110. data/app/components/solidus_admin/users/addresses/component.html.erb +46 -0
  111. data/app/components/solidus_admin/users/addresses/component.rb +61 -0
  112. data/app/components/solidus_admin/users/addresses/component.yml +14 -0
  113. data/app/components/solidus_admin/users/edit/api_access/component.html.erb +49 -0
  114. data/app/components/solidus_admin/users/edit/api_access/component.js +9 -0
  115. data/app/components/solidus_admin/users/edit/api_access/component.rb +7 -0
  116. data/app/components/solidus_admin/users/edit/api_access/component.yml +10 -0
  117. data/app/components/solidus_admin/users/edit/component.html.erb +52 -0
  118. data/app/components/solidus_admin/users/edit/component.rb +51 -0
  119. data/app/components/solidus_admin/users/edit/component.yml +12 -0
  120. data/app/components/solidus_admin/users/index/component.rb +10 -8
  121. data/app/components/solidus_admin/users/items/component.html.erb +41 -0
  122. data/app/components/solidus_admin/users/items/component.rb +170 -0
  123. data/app/components/solidus_admin/users/items/component.yml +16 -0
  124. data/app/components/solidus_admin/users/orders/component.html.erb +42 -0
  125. data/app/components/solidus_admin/users/orders/component.rb +131 -0
  126. data/app/components/solidus_admin/users/orders/component.yml +12 -0
  127. data/app/components/solidus_admin/users/stats/component.html.erb +11 -0
  128. data/app/components/solidus_admin/users/stats/component.rb +9 -0
  129. data/app/components/solidus_admin/users/stats/component.yml +2 -0
  130. data/app/components/solidus_admin/users_and_roles/component.rb +24 -0
  131. data/app/components/solidus_admin/users_and_roles/component.yml +2 -0
  132. data/app/components/solidus_admin/zones/index/component.rb +1 -1
  133. data/app/controllers/solidus_admin/addresses_controller.rb +6 -1
  134. data/app/controllers/solidus_admin/adjustment_reasons_controller.rb +85 -10
  135. data/app/controllers/solidus_admin/adjustments_controller.rb +57 -0
  136. data/app/controllers/solidus_admin/customers_controller.rb +5 -1
  137. data/app/controllers/solidus_admin/orders_controller.rb +5 -1
  138. data/app/controllers/solidus_admin/products_controller.rb +11 -0
  139. data/app/controllers/solidus_admin/refund_reasons_controller.rb +85 -10
  140. data/app/controllers/solidus_admin/reimbursement_types_controller.rb +0 -5
  141. data/app/controllers/solidus_admin/return_reasons_controller.rb +85 -10
  142. data/app/controllers/solidus_admin/roles_controller.rb +118 -0
  143. data/app/controllers/solidus_admin/shipping_categories_controller.rb +87 -10
  144. data/app/controllers/solidus_admin/shipping_methods_controller.rb +0 -5
  145. data/app/controllers/solidus_admin/stock_items_controller.rb +6 -6
  146. data/app/controllers/solidus_admin/stock_locations_controller.rb +0 -5
  147. data/app/controllers/solidus_admin/store_credit_reasons_controller.rb +85 -10
  148. data/app/controllers/solidus_admin/stores_controller.rb +0 -5
  149. data/app/controllers/solidus_admin/tax_categories_controller.rb +89 -10
  150. data/app/controllers/solidus_admin/tax_rates_controller.rb +0 -5
  151. data/app/controllers/solidus_admin/users_controller.rb +85 -6
  152. data/app/controllers/solidus_admin/zones_controller.rb +0 -5
  153. data/app/helpers/solidus_admin/last_login_helper.rb +16 -0
  154. data/app/helpers/solidus_admin/permission_sets_helper.rb +32 -0
  155. data/app/views/layouts/solidus_admin/application.html.erb +2 -1
  156. data/config/locales/adjustment_reasons.en.yml +5 -1
  157. data/config/locales/adjustments.en.yml +10 -0
  158. data/config/locales/refund_reasons.en.yml +10 -0
  159. data/config/locales/return_reasons.en.yml +5 -1
  160. data/config/locales/roles.en.yml +10 -0
  161. data/config/locales/shipping_categories.en.yml +4 -0
  162. data/config/locales/store_credit_reasons.en.yml +5 -1
  163. data/config/locales/tax_categories.en.yml +4 -0
  164. data/config/locales/users.en.yml +10 -0
  165. data/config/routes.rb +24 -7
  166. data/docs/components.md +109 -0
  167. data/docs/{customizing_view_components.md → customizing_components.md} +2 -7
  168. data/docs/index_pages.md +146 -0
  169. data/docs/{customizing_menu_items.md → menu_items.md} +1 -1
  170. data/docs/stimulusjs.md +85 -0
  171. data/docs/{customizing_tailwindcss.md → tailwindcss.md} +27 -8
  172. data/lib/solidus_admin/component_registry.rb +40 -0
  173. data/lib/solidus_admin/configuration.rb +2 -26
  174. data/lib/solidus_admin/install_tailwindcss.rb +4 -2
  175. data/lib/solidus_admin/testing_support/admin_assets.rb +10 -0
  176. data/lib/solidus_admin/testing_support/component_helpers.rb +27 -0
  177. data/lib/solidus_admin/testing_support/dummy_app/rake_tasks.rb +60 -0
  178. data/lib/solidus_admin/testing_support/feature_helpers.rb +34 -0
  179. data/lib/solidus_admin/version.rb +1 -1
  180. data/solidus_admin.gemspec +7 -3
  181. metadata +108 -19
  182. data/app/components/solidus_admin/promotion_categories/index/component.rb +0 -56
  183. data/app/components/solidus_admin/promotions/index/component.rb +0 -104
  184. data/app/components/solidus_admin/promotions/index/component.yml +0 -10
  185. data/app/controllers/solidus_admin/promotion_categories_controller.rb +0 -29
  186. data/app/controllers/solidus_admin/promotions_controller.rb +0 -46
  187. data/config/locales/promotion_categories.en.yml +0 -6
  188. data/config/locales/promotions.en.yml +0 -6
  189. data/config/locales/refund_reasons_.en.yml +0 -6
@@ -29,6 +29,14 @@ class SolidusAdmin::Orders::Show::Component < SolidusAdmin::BaseComponent
29
29
  ], " ")
30
30
  end
31
31
 
32
+ def turbo_frames
33
+ %w[
34
+ edit_order_email_modal
35
+ edit_order_bill_address_modal
36
+ edit_order_ship_address_modal
37
+ ]
38
+ end
39
+
32
40
  def customer_name(user)
33
41
  (
34
42
  user.default_user_bill_address ||
@@ -1,18 +1,23 @@
1
1
  <div class="<%= stimulus_id %>">
2
- <%= render component("orders/show").new(order: @order) %>
3
- <%= render component("ui/modal").new(title: t(".title"), close_path: close_path) do |modal| %>
4
- <%= form_for @order, url: close_path, html: { id: form_id} do |f| %>
5
- <%= render component("ui/forms/field").text_field(f, :email) %>
6
- <label class="font-normal text-sm mt-4 block">
7
- <%= t('.guest_checkout') %>:
8
- <output class="font-semibold text-sm"><%= @order.user ? t('.no') : t('.yes') %></output>
9
- <%= render component('ui/toggletip').new(text: t('.guest_checkout_tip'), class: "align-middle") %>
10
- </label>
11
- <% end %>
2
+ <%= turbo_frame_tag "edit_order_email_modal" do %>
3
+ <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
4
+ <%= form_for @order, url: solidus_admin.order_path(@order), html: { id: form_id } do |f| %>
5
+ <%= render component("ui/forms/field").text_field(f, :email) %>
6
+ <label class="font-normal text-sm mt-4 block">
7
+ <%= t('.guest_checkout') %>:
8
+ <output class="font-semibold text-sm"><%= @order.user ? t('.no') : t('.yes') %></output>
9
+ <%= render component('ui/toggletip').new(text: t('.guest_checkout_tip'), class: "align-middle") %>
10
+ </label>
11
+ <% end %>
12
12
 
13
- <% modal.with_actions do %>
14
- <%= render component("ui/button").new(tag: :a, scheme: :secondary, href: close_path, type: :submit, text: t('.cancel')) %>
15
- <%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
13
+ <% modal.with_actions do %>
14
+ <form method="dialog">
15
+ <%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
16
+ </form>
17
+ <%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
18
+ <% end %>
16
19
  <% end %>
17
20
  <% end %>
21
+
22
+ <%= render component("orders/show").new(order: @order) %>
18
23
  </div>
@@ -8,8 +8,4 @@ class SolidusAdmin::Orders::Show::Email::Component < SolidusAdmin::BaseComponent
8
8
  def form_id
9
9
  dom_id(@order, "#{stimulus_id}_email_form")
10
10
  end
11
-
12
- def close_path
13
- @close_path ||= solidus_admin.order_path(@order)
14
- end
15
11
  end
@@ -6,7 +6,7 @@
6
6
  { label: t('.taxes'), value: number_to_currency(@order.additional_tax_total) },
7
7
  { label: t('.shipping'), value: number_to_currency(@order.shipment_total) },
8
8
  { label: link_to(t('.add_promo_code'), '#', class: "body-link"), value: number_to_currency(@order.promo_total) },
9
- { label: link_to(t('.adjustments'), '#', class: "body-link"), value: number_to_currency(@order.adjustment_total) },
9
+ { label: link_to(t('.adjustments'), solidus_admin.order_adjustments_path(@order), class: "body-link"), value: number_to_currency(@order.adjustment_total) },
10
10
  { label: t('.total'), value: number_to_currency(@order.total), class: 'font-semibold' }
11
11
  ]
12
12
  ) %>
@@ -36,7 +36,7 @@ class SolidusAdmin::PaymentMethods::Index::Component < SolidusAdmin::UI::Pages::
36
36
  def batch_actions
37
37
  [
38
38
  {
39
- display_name: t('.batch_actions.delete'),
39
+ label: t('.batch_actions.delete'),
40
40
  action: solidus_admin.payment_methods_path,
41
41
  method: :delete,
42
42
  icon: 'delete-bin-7-line',
@@ -29,22 +29,25 @@ class SolidusAdmin::Products::Index::Component < SolidusAdmin::UI::Pages::Index:
29
29
  def batch_actions
30
30
  [
31
31
  {
32
- display_name: t('.batch_actions.delete'),
32
+ label: t('.batch_actions.delete'),
33
33
  action: solidus_admin.products_path,
34
34
  method: :delete,
35
35
  icon: 'delete-bin-7-line',
36
+ require_confirmation: true,
36
37
  },
37
38
  {
38
- display_name: t('.batch_actions.discontinue'),
39
+ label: t('.batch_actions.discontinue'),
39
40
  action: solidus_admin.discontinue_products_path,
40
41
  method: :put,
41
42
  icon: 'pause-circle-line',
43
+ require_confirmation: true,
42
44
  },
43
45
  {
44
- display_name: t('.batch_actions.activate'),
46
+ label: t('.batch_actions.activate'),
45
47
  action: solidus_admin.activate_products_path,
46
48
  method: :put,
47
49
  icon: 'play-circle-line',
50
+ require_confirmation: true,
48
51
  },
49
52
  ]
50
53
  end
@@ -63,9 +66,9 @@ class SolidusAdmin::Products::Index::Component < SolidusAdmin::UI::Pages::Index:
63
66
  def filters
64
67
  Spree::OptionType.all.map do |option_type|
65
68
  {
66
- presentation: option_type.presentation,
69
+ label: option_type.presentation,
67
70
  combinator: 'or',
68
- attribute: "variants_option_values",
71
+ attribute: "option_values_id",
69
72
  predicate: "in",
70
73
  options: option_type.option_values.pluck(:name, :id),
71
74
  }
@@ -100,9 +100,20 @@
100
100
 
101
101
  <%= page_with_sidebar_aside do %>
102
102
  <%= render component('ui/panel').new(title: "Publishing") do %>
103
- <%= render component("ui/forms/field").text_field(f, :available_on, hint: t(".available_on_html"), type: :date) %>
104
- <%= render component("ui/forms/field").text_field(f, :discontinue_on, hint: t(".discontinue_on_html"), type: :date) %>
105
-
103
+ <%= render component("ui/forms/field").text_field(
104
+ f,
105
+ :available_on,
106
+ hint: t(".available_on_html"),
107
+ type: :date,
108
+ value: f.object.available_on&.to_date
109
+ ) %>
110
+ <%= render component("ui/forms/field").text_field(
111
+ f,
112
+ :discontinue_on,
113
+ hint: t(".discontinue_on_html"),
114
+ type: :date,
115
+ value: f.object.discontinue_on&.to_date
116
+ ) %>
106
117
  <label class="flex gap-2 items-center">
107
118
  <%= render component("ui/forms/checkbox").new(
108
119
  name: "#{f.object_name}[promotionable]",
@@ -5,6 +5,7 @@ class SolidusAdmin::Products::Status::Component < SolidusAdmin::BaseComponent
5
5
  available: :green,
6
6
  discontinued: :yellow,
7
7
  deleted: :red,
8
+ unavailable: :yellow
8
9
  }.freeze
9
10
 
10
11
  def self.from_product(product)
@@ -13,8 +14,10 @@ class SolidusAdmin::Products::Status::Component < SolidusAdmin::BaseComponent
13
14
  :deleted
14
15
  elsif product.discontinued?
15
16
  :discontinued
16
- else
17
+ elsif product.available?
17
18
  :available
19
+ else
20
+ :unavailable
18
21
  end
19
22
 
20
23
  new(status: status)
@@ -2,3 +2,4 @@ en:
2
2
  available: 'Available'
3
3
  discontinued: 'Discontinued'
4
4
  deleted: 'Deleted'
5
+ unavailable: 'Unavailable'
@@ -29,7 +29,7 @@ class SolidusAdmin::Properties::Index::Component < SolidusAdmin::UI::Pages::Inde
29
29
  def batch_actions
30
30
  [
31
31
  {
32
- display_name: t('.batch_actions.delete'),
32
+ label: t('.batch_actions.delete'),
33
33
  action: solidus_admin.properties_path,
34
34
  method: :delete,
35
35
  icon: 'delete-bin-7-line',
@@ -0,0 +1,27 @@
1
+ <%= turbo_frame_tag :edit_refund_reason_modal do %>
2
+ <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
3
+ <%= form_for @refund_reason, url: solidus_admin.refund_reason_path(@refund_reason), html: { id: form_id } do |f| %>
4
+ <div class="flex flex-col gap-6 pb-4">
5
+ <%= render component("ui/forms/field").text_field(f, :name, class: "required") %>
6
+ <%= render component("ui/forms/field").text_field(f, :code, class: "required") %>
7
+ <label class="flex gap-2 items-center">
8
+ <%= hidden_field_tag "#{f.object_name}[active]", "0" %>
9
+ <%= render component("ui/forms/checkbox").new(
10
+ name: "#{f.object_name}[active]",
11
+ value: "1",
12
+ checked: f.object.active
13
+ ) %>
14
+ <span class="font-semibold text-xs ml-2"><%= Spree::RefundReason.human_attribute_name :active %></span>
15
+ <%= render component("ui/toggletip").new(text: t(".hints.active")) %>
16
+ </label>
17
+ </div>
18
+ <% modal.with_actions do %>
19
+ <form method="dialog">
20
+ <%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
21
+ </form>
22
+ <%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
23
+ <% end %>
24
+ <% end %>
25
+ <% end %>
26
+ <% end %>
27
+ <%= render component("refund_reasons/index").new(page: @page) %>
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::RefundReasons::Edit::Component < SolidusAdmin::BaseComponent
4
+ def initialize(page:, refund_reason:)
5
+ @page = page
6
+ @refund_reason = refund_reason
7
+ end
8
+
9
+ def form_id
10
+ dom_id(@refund_reason, "#{stimulus_id}_edit_refund_reason_form")
11
+ end
12
+ end
@@ -0,0 +1,8 @@
1
+ # Add your component translations here.
2
+ # Use the translation in the example in your template with `t(".hello")`.
3
+ en:
4
+ title: "Edit Refund Reason"
5
+ cancel: "Cancel"
6
+ submit: "Update Refund Reason"
7
+ hints:
8
+ active: "When checked, this refund reason will be available for selection when adding refunds to orders."
@@ -14,14 +14,21 @@ class SolidusAdmin::RefundReasons::Index::Component < SolidusAdmin::RefundsAndRe
14
14
  end
15
15
 
16
16
  def row_url(refund_reason)
17
- spree.edit_admin_refund_reason_path(refund_reason)
17
+ spree.edit_admin_refund_reason_path(refund_reason, _turbo_frame: :edit_refund_reason_modal)
18
18
  end
19
19
 
20
- def actions
20
+ def turbo_frames
21
+ %w[
22
+ new_refund_reason_modal
23
+ edit_refund_reason_modal
24
+ ]
25
+ end
26
+
27
+ def page_actions
21
28
  render component("ui/button").new(
22
29
  tag: :a,
23
30
  text: t('.add'),
24
- href: spree.new_admin_refund_reason_path,
31
+ href: solidus_admin.new_refund_reason_path, data: { turbo_frame: :new_refund_reason_modal },
25
32
  icon: "add-line",
26
33
  class: "align-self-end w-full",
27
34
  )
@@ -30,7 +37,7 @@ class SolidusAdmin::RefundReasons::Index::Component < SolidusAdmin::RefundsAndRe
30
37
  def batch_actions
31
38
  [
32
39
  {
33
- display_name: t('.batch_actions.delete'),
40
+ label: t('.batch_actions.delete'),
34
41
  action: solidus_admin.refund_reasons_path,
35
42
  method: :delete,
36
43
  icon: 'delete-bin-7-line',
@@ -0,0 +1,27 @@
1
+ <%= turbo_frame_tag :new_refund_reason_modal do %>
2
+ <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
3
+ <%= form_for @refund_reason, url: solidus_admin.refund_reasons_path, html: { id: form_id } do |f| %>
4
+ <div class="flex flex-col gap-6 pb-4">
5
+ <%= render component("ui/forms/field").text_field(f, :name, class: "required") %>
6
+ <%= render component("ui/forms/field").text_field(f, :code, class: "required") %>
7
+ <label class="flex gap-2 items-center">
8
+ <%= render component("ui/forms/checkbox").new(
9
+ name: "#{f.object_name}[active]",
10
+ value: "1",
11
+ checked: f.object.active
12
+ ) %>
13
+ <span class="font-semibold text-xs ml-2"><%= Spree::RefundReason.human_attribute_name :active %></span>
14
+ <%= render component("ui/toggletip").new(text: t(".hints.active")) %>
15
+ </label>
16
+ </div>
17
+ <% modal.with_actions do %>
18
+ <form method="dialog">
19
+ <%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
20
+ </form>
21
+ <%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
22
+ <% end %>
23
+ <% end %>
24
+ <% end %>
25
+ <% end %>
26
+
27
+ <%= render component("refund_reasons/index").new(page: @page) %>
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::RefundReasons::New::Component < SolidusAdmin::BaseComponent
4
+ def initialize(page:, refund_reason:)
5
+ @page = page
6
+ @refund_reason = refund_reason
7
+ end
8
+
9
+ def form_id
10
+ dom_id(@refund_reason, "#{stimulus_id}_new_refund_reason_form")
11
+ end
12
+ end
@@ -0,0 +1,6 @@
1
+ en:
2
+ title: "New Refund Reason"
3
+ cancel: "Cancel"
4
+ submit: "Add Refund Reason"
5
+ hints:
6
+ active: "When checked, this refund reason will be available for selection when refunding orders."
@@ -0,0 +1,26 @@
1
+ <%= turbo_frame_tag :edit_return_reason_modal do %>
2
+ <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
3
+ <%= form_for @return_reason, url: solidus_admin.return_reason_path(@return_reason), html: { id: form_id } do |f| %>
4
+ <div class="flex flex-col gap-6 pb-4">
5
+ <%= render component("ui/forms/field").text_field(f, :name, class: "required") %>
6
+ <label class="flex gap-2 items-center">
7
+ <%= hidden_field_tag "#{f.object_name}[active]", "0" %>
8
+ <%= render component("ui/forms/checkbox").new(
9
+ name: "#{f.object_name}[active]",
10
+ value: "1",
11
+ checked: f.object.active
12
+ ) %>
13
+ <span class="font-semibold text-xs ml-2"><%= Spree::ReturnReason.human_attribute_name :active %></span>
14
+ <%= render component("ui/toggletip").new(text: t(".hints.active")) %>
15
+ </label>
16
+ </div>
17
+ <% modal.with_actions do %>
18
+ <form method="dialog">
19
+ <%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
20
+ </form>
21
+ <%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
22
+ <% end %>
23
+ <% end %>
24
+ <% end %>
25
+ <% end %>
26
+ <%= render component("return_reasons/index").new(page: @page) %>
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::ReturnReasons::Edit::Component < SolidusAdmin::BaseComponent
4
+ def initialize(page:, return_reason:)
5
+ @page = page
6
+ @return_reason = return_reason
7
+ end
8
+
9
+ def form_id
10
+ dom_id(@return_reason, "#{stimulus_id}_edit_return_reason_form")
11
+ end
12
+ end
@@ -0,0 +1,8 @@
1
+ # Add your component translations here.
2
+ # Use the translation in the example in your template with `t(".hello")`.
3
+ en:
4
+ title: "Edit Return Reason"
5
+ cancel: "Cancel"
6
+ submit: "Update Return Reason"
7
+ hints:
8
+ active: "When checked, this return reason will be available for selection when returning orders."
@@ -14,13 +14,31 @@ class SolidusAdmin::ReturnReasons::Index::Component < SolidusAdmin::RefundsAndRe
14
14
  end
15
15
 
16
16
  def row_url(return_reason)
17
- spree.edit_admin_return_reason_path(return_reason)
17
+ spree.edit_admin_return_reason_path(return_reason, _turbo_frame: :edit_return_reason_modal)
18
+ end
19
+
20
+ def turbo_frames
21
+ %w[
22
+ new_return_reason_modal
23
+ edit_return_reason_modal
24
+ ]
25
+ end
26
+
27
+ def page_actions
28
+ render component("ui/button").new(
29
+ tag: :a,
30
+ text: t('.add'),
31
+ href: solidus_admin.new_return_reason_path,
32
+ data: { turbo_frame: :new_return_reason_modal },
33
+ icon: "add-line",
34
+ class: "align-self-end w-full",
35
+ )
18
36
  end
19
37
 
20
38
  def batch_actions
21
39
  [
22
40
  {
23
- display_name: t('.batch_actions.delete'),
41
+ label: t('.batch_actions.delete'),
24
42
  action: solidus_admin.return_reasons_path,
25
43
  method: :delete,
26
44
  icon: 'delete-bin-7-line',
@@ -0,0 +1,27 @@
1
+ <%= turbo_frame_tag :new_return_reason_modal do %>
2
+ <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
3
+ <%= form_for @return_reason, url: solidus_admin.return_reasons_path, html: { id: form_id } do |f| %>
4
+ <div class="flex flex-col gap-6 pb-4">
5
+ <%= render component("ui/forms/field").text_field(f, :name, class: "required") %>
6
+ <label class="flex gap-2 items-center">
7
+ <%= hidden_field_tag "#{f.object_name}[active]", "0" %>
8
+ <%= render component("ui/forms/checkbox").new(
9
+ name: "#{f.object_name}[active]",
10
+ value: "1",
11
+ checked: f.object.active
12
+ ) %>
13
+ <span class="font-semibold text-xs ml-2"><%= Spree::ReturnReason.human_attribute_name :active %></span>
14
+ <%= render component("ui/toggletip").new(text: t(".hints.active")) %>
15
+ </label>
16
+ </div>
17
+ <% modal.with_actions do %>
18
+ <form method="dialog">
19
+ <%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
20
+ </form>
21
+ <%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
22
+ <% end %>
23
+ <% end %>
24
+ <% end %>
25
+ <% end %>
26
+
27
+ <%= render component("return_reasons/index").new(page: @page) %>
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::ReturnReasons::New::Component < SolidusAdmin::BaseComponent
4
+ def initialize(page:, return_reason:)
5
+ @page = page
6
+ @return_reason = return_reason
7
+ end
8
+
9
+ def form_id
10
+ dom_id(@return_reason, "#{stimulus_id}_new_return_reason_form")
11
+ end
12
+ end
@@ -0,0 +1,8 @@
1
+ # Add your component translations here.
2
+ # Use the translation in the example in your template with `t(".hello")`.
3
+ en:
4
+ title: "New Return Reason"
5
+ cancel: "Cancel"
6
+ submit: "Add Return Reason"
7
+ hints:
8
+ active: "When checked, this return reason will be available for selection when returning orders."
@@ -0,0 +1,33 @@
1
+ <%= turbo_frame_tag :edit_role_modal do %>
2
+ <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
3
+ <%= form_for @role, url: solidus_admin.role_path(@role), html: { id: form_id } do |f| %>
4
+ <div class="flex flex-col gap-6 pb-4">
5
+ <%= render component("ui/forms/field").text_field(f, :name, class: "required") %>
6
+ <%= render component("ui/forms/field").text_field(f, :description) %>
7
+ </div>
8
+
9
+ <% if permission_set_options.present? %>
10
+ <h3 class="text-l py-4 font-semibold text-gray-900">
11
+ <%= t(".choose_permissions") %>
12
+ </h3>
13
+ <% end %>
14
+
15
+ <%= render component("ui/checkbox_row").new(options: permission_set_options[:order], row_title: t('.orders'), form: f, method: :permission_set_ids) %>
16
+ <%= render component("ui/checkbox_row").new(options: permission_set_options[:product], row_title: t('.products'), form: f, method: :permission_set_ids) %>
17
+ <%= render component("ui/checkbox_row").new(options: permission_set_options[:stock], row_title: t('.stock'), form: f, method: :permission_set_ids) %>
18
+ <%= render component("ui/checkbox_row").new(options: permission_set_options[:user], row_title: t('.customers'), form: f, method: :permission_set_ids) %>
19
+ <%= render component("ui/checkbox_row").new(options: permission_set_options[:restricted_stock], row_title: t('.restricted_stock'), form: f, method: :permission_set_ids) %>
20
+ <%= render component("ui/checkbox_row").new(options: permission_set_options[:configuration], row_title: t('.settings'), form: f, method: :permission_set_ids) %>
21
+ <%= render component("ui/checkbox_row").new(options: permission_set_options[:other], row_title: t('.other'), form: f, method: :permission_set_ids, layout: :subsection) %>
22
+
23
+ <% modal.with_actions do %>
24
+ <form method="dialog">
25
+ <%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
26
+ </form>
27
+ <%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
28
+ <% end %>
29
+ <% end %>
30
+ <% end %>
31
+ <% end %>
32
+
33
+ <%= render component("roles/index").new(page: @page) %>
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::Roles::Edit::Component < SolidusAdmin::BaseComponent
4
+ include SolidusAdmin::PermissionSetsHelper
5
+
6
+ def initialize(page:, role:)
7
+ @page = page
8
+ @role = role
9
+ end
10
+
11
+ def form_id
12
+ dom_id(@role, "#{stimulus_id}_edit_role_form")
13
+ end
14
+
15
+ private
16
+
17
+ def permission_set_options
18
+ @permission_set_options ||= organize_permissions(permission_sets: Spree::PermissionSet.all, view_label: t(".view"), edit_label: t(".edit"))
19
+ end
20
+ end
@@ -0,0 +1,19 @@
1
+ # Add your component translations here.
2
+ # Use the translation in the example in your template with `t(".hello")`.
3
+ en:
4
+ title: "Edit Role"
5
+ cancel: "Cancel"
6
+ submit: "Update Role"
7
+ edit: "Edit"
8
+ view: "View"
9
+ name_placeholder: "Enter a clear role name"
10
+ description_placeholder: "Enter a brief description"
11
+ choose_permissions: "Choose permissions"
12
+ orders: "Orders"
13
+ products: "Products"
14
+ stock: "Stock"
15
+ restricted_stock: "Restricted Stock"
16
+ customers: "Customers"
17
+ promotions: "Promotions"
18
+ settings: "Settings"
19
+ other: "Other permissions"
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::Roles::Index::Component < SolidusAdmin::UsersAndRoles::Component
4
+ def model_class
5
+ Spree::Role
6
+ end
7
+
8
+ def search_key
9
+ :name_cont
10
+ end
11
+
12
+ def search_url
13
+ solidus_admin.roles_path
14
+ end
15
+
16
+ def row_url(role)
17
+ solidus_admin.edit_role_path(role, _turbo_frame: :edit_role_modal)
18
+ end
19
+
20
+ def page_actions
21
+ render component("ui/button").new(
22
+ tag: :a,
23
+ text: t('.add'),
24
+ href: solidus_admin.new_role_path, data: { turbo_frame: :new_role_modal },
25
+ icon: "add-line",
26
+ )
27
+ end
28
+
29
+ def turbo_frames
30
+ %w[
31
+ new_role_modal
32
+ edit_role_modal
33
+ ]
34
+ end
35
+
36
+ def batch_actions
37
+ [
38
+ {
39
+ label: t('.batch_actions.delete'),
40
+ action: solidus_admin.roles_path,
41
+ method: :delete,
42
+ icon: 'delete-bin-7-line',
43
+ },
44
+ ]
45
+ end
46
+
47
+ def scopes
48
+ [
49
+ { name: :all, label: t('.scopes.all'), default: true },
50
+ { name: :admin, label: t('.scopes.admin') },
51
+ ]
52
+ end
53
+
54
+ def filters
55
+ []
56
+ end
57
+
58
+ def columns
59
+ [
60
+ {
61
+ header: :role,
62
+ data: :name,
63
+ },
64
+ {
65
+ header: :description,
66
+ data: :description,
67
+ }
68
+ ]
69
+ end
70
+ end
@@ -0,0 +1,6 @@
1
+ en:
2
+ batch_actions:
3
+ delete: "Delete"
4
+ scopes:
5
+ admin: "Admin"
6
+ all: "All"
@@ -0,0 +1,33 @@
1
+ <%= turbo_frame_tag :new_role_modal do %>
2
+ <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
3
+ <%= form_for @role, url: solidus_admin.roles_path, html: { id: form_id } do |f| %>
4
+ <div class="flex flex-col gap-6 pb-4">
5
+ <%= render component("ui/forms/field").text_field(f, :name, class: "required", placeholder: t(".name_placeholder")) %>
6
+ <%= render component("ui/forms/field").text_field(f, :description, placeholder: t(".description_placeholder")) %>
7
+ </div>
8
+
9
+ <% if permission_set_options.present? %>
10
+ <h3 class="text-l py-4 font-semibold text-gray-900">
11
+ <%= t(".choose_permissions") %>
12
+ </h3>
13
+ <% end %>
14
+
15
+ <%= render component("ui/checkbox_row").new(options: permission_set_options[:order], row_title: t('.orders'), form: f, method: :permission_set_ids) %>
16
+ <%= render component("ui/checkbox_row").new(options: permission_set_options[:product], row_title: t('.products'), form: f, method: :permission_set_ids) %>
17
+ <%= render component("ui/checkbox_row").new(options: permission_set_options[:stock], row_title: t('.stock'), form: f, method: :permission_set_ids) %>
18
+ <%= render component("ui/checkbox_row").new(options: permission_set_options[:user], row_title: t('.customers'), form: f, method: :permission_set_ids) %>
19
+ <%= render component("ui/checkbox_row").new(options: permission_set_options[:restricted_stock], row_title: t('.restricted_stock'), form: f, method: :permission_set_ids) %>
20
+ <%= render component("ui/checkbox_row").new(options: permission_set_options[:configuration], row_title: t('.settings'), form: f, method: :permission_set_ids) %>
21
+ <%= render component("ui/checkbox_row").new(options: permission_set_options[:other], row_title: t('.other'), form: f, method: :permission_set_ids, layout: :subsection) %>
22
+
23
+ <% modal.with_actions do %>
24
+ <form method="dialog">
25
+ <%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
26
+ </form>
27
+ <%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
28
+ <% end %>
29
+ <% end %>
30
+ <% end %>
31
+ <% end %>
32
+
33
+ <%= render component("roles/index").new(page: @page) %>