solidus_admin 0.1.0 → 0.3.0

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 (241) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +61 -7
  3. data/Rakefile +1 -0
  4. data/app/assets/builds/solidus_admin/tailwind.css +197 -162
  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 +26 -19
  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 +4 -1
  15. data/app/components/solidus_admin/option_types/index/component.rb +21 -7
  16. data/app/components/solidus_admin/orders/index/component.rb +28 -23
  17. data/app/components/solidus_admin/orders/index/component.yml +1 -1
  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 +29 -19
  34. data/app/components/solidus_admin/payment_methods/index/component.yml +0 -5
  35. data/app/components/solidus_admin/products/index/component.rb +25 -15
  36. data/app/components/solidus_admin/products/index/component.yml +0 -2
  37. data/app/components/solidus_admin/products/show/component.html.erb +14 -3
  38. data/app/components/solidus_admin/products/status/component.rb +4 -1
  39. data/app/components/solidus_admin/products/status/component.yml +1 -0
  40. data/app/components/solidus_admin/properties/index/component.rb +18 -19
  41. data/app/components/solidus_admin/refund_reasons/edit/component.html.erb +27 -0
  42. data/app/components/solidus_admin/refund_reasons/edit/component.rb +12 -0
  43. data/app/components/solidus_admin/refund_reasons/edit/component.yml +8 -0
  44. data/app/components/solidus_admin/refund_reasons/index/component.rb +26 -19
  45. data/app/components/solidus_admin/refund_reasons/new/component.html.erb +27 -0
  46. data/app/components/solidus_admin/refund_reasons/new/component.rb +12 -0
  47. data/app/components/solidus_admin/refund_reasons/new/component.yml +6 -0
  48. data/app/components/solidus_admin/refunds_and_returns/component.rb +33 -13
  49. data/app/components/solidus_admin/reimbursement_types/index/component.rb +7 -25
  50. data/app/components/solidus_admin/return_reasons/edit/component.html.erb +26 -0
  51. data/app/components/solidus_admin/return_reasons/edit/component.rb +12 -0
  52. data/app/components/solidus_admin/return_reasons/edit/component.yml +8 -0
  53. data/app/components/solidus_admin/return_reasons/index/component.rb +27 -19
  54. data/app/components/solidus_admin/return_reasons/new/component.html.erb +27 -0
  55. data/app/components/solidus_admin/return_reasons/new/component.rb +12 -0
  56. data/app/components/solidus_admin/return_reasons/new/component.yml +8 -0
  57. data/app/components/solidus_admin/roles/edit/component.html.erb +33 -0
  58. data/app/components/solidus_admin/roles/edit/component.rb +20 -0
  59. data/app/components/solidus_admin/roles/edit/component.yml +19 -0
  60. data/app/components/solidus_admin/roles/index/component.rb +70 -0
  61. data/app/components/solidus_admin/roles/index/component.yml +6 -0
  62. data/app/components/solidus_admin/roles/new/component.html.erb +33 -0
  63. data/app/components/solidus_admin/roles/new/component.rb +20 -0
  64. data/app/components/solidus_admin/roles/new/component.yml +19 -0
  65. data/app/components/solidus_admin/shipping/component.rb +23 -11
  66. data/app/components/solidus_admin/shipping_categories/edit/component.html.erb +16 -0
  67. data/app/components/solidus_admin/shipping_categories/edit/component.rb +12 -0
  68. data/app/components/solidus_admin/shipping_categories/edit/component.yml +6 -0
  69. data/app/components/solidus_admin/shipping_categories/index/component.rb +37 -20
  70. data/app/components/solidus_admin/shipping_categories/new/component.html.erb +17 -0
  71. data/app/components/solidus_admin/shipping_categories/new/component.rb +12 -0
  72. data/app/components/solidus_admin/shipping_categories/new/component.yml +6 -0
  73. data/app/components/solidus_admin/shipping_methods/index/component.rb +19 -19
  74. data/app/components/solidus_admin/stock_items/edit/component.html.erb +66 -72
  75. data/app/components/solidus_admin/stock_items/edit/component.rb +0 -5
  76. data/app/components/solidus_admin/stock_items/index/component.rb +13 -20
  77. data/app/components/solidus_admin/stock_locations/index/component.rb +19 -11
  78. data/app/components/solidus_admin/stock_locations/index/component.yml +0 -3
  79. data/app/components/solidus_admin/store_credit_reasons/edit/component.html.erb +26 -0
  80. data/app/components/solidus_admin/store_credit_reasons/edit/component.rb +12 -0
  81. data/app/components/solidus_admin/store_credit_reasons/edit/component.yml +8 -0
  82. data/app/components/solidus_admin/store_credit_reasons/index/component.rb +26 -19
  83. data/app/components/solidus_admin/store_credit_reasons/new/component.html.erb +27 -0
  84. data/app/components/solidus_admin/store_credit_reasons/new/component.rb +12 -0
  85. data/app/components/solidus_admin/store_credit_reasons/new/component.yml +8 -0
  86. data/app/components/solidus_admin/stores/index/component.rb +18 -19
  87. data/app/components/solidus_admin/tax_categories/edit/component.html.erb +28 -0
  88. data/app/components/solidus_admin/tax_categories/edit/component.rb +12 -0
  89. data/app/components/solidus_admin/tax_categories/edit/component.yml +8 -0
  90. data/app/components/solidus_admin/tax_categories/index/component.rb +28 -21
  91. data/app/components/solidus_admin/tax_categories/new/component.html.erb +28 -0
  92. data/app/components/solidus_admin/tax_categories/new/component.rb +12 -0
  93. data/app/components/solidus_admin/tax_categories/new/component.yml +8 -0
  94. data/app/components/solidus_admin/tax_rates/index/component.rb +21 -17
  95. data/app/components/solidus_admin/taxes/component.rb +8 -8
  96. data/app/components/solidus_admin/taxonomies/index/component.rb +18 -12
  97. data/app/components/solidus_admin/ui/button/component.rb +1 -1
  98. data/app/components/solidus_admin/ui/checkbox_row/component.html.erb +29 -0
  99. data/app/components/solidus_admin/ui/checkbox_row/component.rb +11 -0
  100. data/app/components/solidus_admin/ui/forms/address/component.html.erb +27 -9
  101. data/app/components/solidus_admin/ui/forms/address/component.js +38 -13
  102. data/app/components/solidus_admin/ui/forms/search/component.html.erb +2 -3
  103. data/app/components/solidus_admin/ui/forms/search/component.js +3 -3
  104. data/app/components/solidus_admin/ui/modal/component.html.erb +7 -7
  105. data/app/components/solidus_admin/ui/modal/component.js +7 -0
  106. data/app/components/solidus_admin/ui/modal/component.rb +1 -1
  107. data/app/components/solidus_admin/ui/pages/index/component.html.erb +44 -0
  108. data/app/components/solidus_admin/ui/pages/index/component.rb +105 -0
  109. data/app/components/solidus_admin/ui/panel/component.html.erb +5 -16
  110. data/app/components/solidus_admin/ui/panel/component.rb +11 -7
  111. data/app/components/solidus_admin/ui/table/component.html.erb +2 -1
  112. data/app/components/solidus_admin/ui/table/component.js +31 -2
  113. data/app/components/solidus_admin/ui/table/component.rb +24 -8
  114. data/app/components/solidus_admin/ui/table/component.yml +1 -0
  115. data/app/components/solidus_admin/ui/thumbnail/component.rb +1 -1
  116. data/app/components/solidus_admin/ui/thumbnail_with_caption/component.html.erb +17 -0
  117. data/app/components/solidus_admin/ui/thumbnail_with_caption/component.rb +15 -0
  118. data/app/components/solidus_admin/users/addresses/component.html.erb +46 -0
  119. data/app/components/solidus_admin/users/addresses/component.rb +61 -0
  120. data/app/components/solidus_admin/users/addresses/component.yml +14 -0
  121. data/app/components/solidus_admin/users/edit/api_access/component.html.erb +49 -0
  122. data/app/components/solidus_admin/users/edit/api_access/component.js +9 -0
  123. data/app/components/solidus_admin/users/edit/api_access/component.rb +7 -0
  124. data/app/components/solidus_admin/users/edit/api_access/component.yml +10 -0
  125. data/app/components/solidus_admin/users/edit/component.html.erb +52 -0
  126. data/app/components/solidus_admin/users/edit/component.rb +51 -0
  127. data/app/components/solidus_admin/users/edit/component.yml +12 -0
  128. data/app/components/solidus_admin/users/index/component.rb +25 -16
  129. data/app/components/solidus_admin/users/index/component.yml +0 -3
  130. data/app/components/solidus_admin/users/items/component.html.erb +41 -0
  131. data/app/components/solidus_admin/users/items/component.rb +170 -0
  132. data/app/components/solidus_admin/users/items/component.yml +16 -0
  133. data/app/components/solidus_admin/users/orders/component.html.erb +42 -0
  134. data/app/components/solidus_admin/users/orders/component.rb +131 -0
  135. data/app/components/solidus_admin/users/orders/component.yml +12 -0
  136. data/app/components/solidus_admin/users/stats/component.html.erb +11 -0
  137. data/app/components/solidus_admin/users/stats/component.rb +9 -0
  138. data/app/components/solidus_admin/users/stats/component.yml +2 -0
  139. data/app/components/solidus_admin/users_and_roles/component.rb +24 -0
  140. data/app/components/solidus_admin/users_and_roles/component.yml +2 -0
  141. data/app/components/solidus_admin/zones/index/component.rb +19 -11
  142. data/app/controllers/solidus_admin/addresses_controller.rb +6 -1
  143. data/app/controllers/solidus_admin/adjustment_reasons_controller.rb +85 -10
  144. data/app/controllers/solidus_admin/adjustments_controller.rb +57 -0
  145. data/app/controllers/solidus_admin/customers_controller.rb +5 -1
  146. data/app/controllers/solidus_admin/orders_controller.rb +5 -1
  147. data/app/controllers/solidus_admin/products_controller.rb +11 -0
  148. data/app/controllers/solidus_admin/properties_controller.rb +1 -1
  149. data/app/controllers/solidus_admin/refund_reasons_controller.rb +85 -10
  150. data/app/controllers/solidus_admin/reimbursement_types_controller.rb +0 -5
  151. data/app/controllers/solidus_admin/return_reasons_controller.rb +85 -10
  152. data/app/controllers/solidus_admin/roles_controller.rb +118 -0
  153. data/app/controllers/solidus_admin/shipping_categories_controller.rb +87 -10
  154. data/app/controllers/solidus_admin/shipping_methods_controller.rb +0 -5
  155. data/app/controllers/solidus_admin/stock_items_controller.rb +6 -6
  156. data/app/controllers/solidus_admin/stock_locations_controller.rb +0 -5
  157. data/app/controllers/solidus_admin/store_credit_reasons_controller.rb +85 -10
  158. data/app/controllers/solidus_admin/stores_controller.rb +0 -5
  159. data/app/controllers/solidus_admin/tax_categories_controller.rb +89 -10
  160. data/app/controllers/solidus_admin/tax_rates_controller.rb +0 -5
  161. data/app/controllers/solidus_admin/users_controller.rb +85 -6
  162. data/app/controllers/solidus_admin/zones_controller.rb +0 -5
  163. data/app/helpers/solidus_admin/last_login_helper.rb +16 -0
  164. data/app/helpers/solidus_admin/permission_sets_helper.rb +32 -0
  165. data/app/views/layouts/solidus_admin/application.html.erb +2 -1
  166. data/app/views/layouts/solidus_admin/preview.html.erb +2 -0
  167. data/config/initializers/view_component.rb +1 -1
  168. data/config/locales/adjustment_reasons.en.yml +5 -1
  169. data/config/locales/adjustments.en.yml +10 -0
  170. data/config/locales/refund_reasons.en.yml +10 -0
  171. data/config/locales/return_reasons.en.yml +5 -1
  172. data/config/locales/roles.en.yml +10 -0
  173. data/config/locales/shipping_categories.en.yml +4 -0
  174. data/config/locales/store_credit_reasons.en.yml +5 -1
  175. data/config/locales/tax_categories.en.yml +4 -0
  176. data/config/locales/users.en.yml +10 -0
  177. data/config/routes.rb +24 -7
  178. data/docs/components.md +109 -0
  179. data/docs/{customizing_view_components.md → customizing_components.md} +2 -7
  180. data/docs/index_pages.md +146 -0
  181. data/docs/{customizing_menu_items.md → menu_items.md} +1 -1
  182. data/docs/stimulusjs.md +85 -0
  183. data/docs/{customizing_tailwindcss.md → tailwindcss.md} +27 -8
  184. data/lib/solidus_admin/component_registry.rb +40 -0
  185. data/lib/solidus_admin/configuration.rb +5 -27
  186. data/lib/solidus_admin/install_tailwindcss.rb +3 -1
  187. data/lib/solidus_admin/testing_support/admin_assets.rb +10 -0
  188. data/lib/solidus_admin/testing_support/component_helpers.rb +27 -0
  189. data/lib/solidus_admin/testing_support/dummy_app/rake_tasks.rb +60 -0
  190. data/lib/solidus_admin/testing_support/feature_helpers.rb +34 -0
  191. data/lib/solidus_admin/version.rb +1 -1
  192. data/solidus_admin.gemspec +7 -3
  193. metadata +111 -59
  194. data/app/components/solidus_admin/adjustment_reasons/index/component.html.erb +0 -32
  195. data/app/components/solidus_admin/adjustment_reasons/index/component.yml +0 -4
  196. data/app/components/solidus_admin/option_types/index/component.html.erb +0 -30
  197. data/app/components/solidus_admin/orders/index/component.html.erb +0 -35
  198. data/app/components/solidus_admin/payment_methods/index/component.html.erb +0 -38
  199. data/app/components/solidus_admin/products/index/component.html.erb +0 -34
  200. data/app/components/solidus_admin/promotion_categories/index/component.html.erb +0 -26
  201. data/app/components/solidus_admin/promotion_categories/index/component.rb +0 -57
  202. data/app/components/solidus_admin/promotion_categories/index/component.yml +0 -4
  203. data/app/components/solidus_admin/promotions/index/component.html.erb +0 -34
  204. data/app/components/solidus_admin/promotions/index/component.rb +0 -97
  205. data/app/components/solidus_admin/promotions/index/component.yml +0 -14
  206. data/app/components/solidus_admin/properties/index/component.html.erb +0 -34
  207. data/app/components/solidus_admin/properties/index/component.yml +0 -4
  208. data/app/components/solidus_admin/refund_reasons/index/component.html.erb +0 -31
  209. data/app/components/solidus_admin/refund_reasons/index/component.yml +0 -4
  210. data/app/components/solidus_admin/refunds_and_returns/component.html.erb +0 -26
  211. data/app/components/solidus_admin/reimbursement_types/index/component.html.erb +0 -22
  212. data/app/components/solidus_admin/reimbursement_types/index/component.yml +0 -4
  213. data/app/components/solidus_admin/return_reasons/index/component.html.erb +0 -31
  214. data/app/components/solidus_admin/return_reasons/index/component.yml +0 -4
  215. data/app/components/solidus_admin/shipping/component.html.erb +0 -30
  216. data/app/components/solidus_admin/shipping_categories/index/component.html.erb +0 -32
  217. data/app/components/solidus_admin/shipping_categories/index/component.yml +0 -4
  218. data/app/components/solidus_admin/shipping_methods/index/component.html.erb +0 -32
  219. data/app/components/solidus_admin/shipping_methods/index/component.yml +0 -4
  220. data/app/components/solidus_admin/stock_items/index/component.html.erb +0 -26
  221. data/app/components/solidus_admin/stock_locations/index/component.html.erb +0 -32
  222. data/app/components/solidus_admin/store_credit_reasons/index/component.html.erb +0 -31
  223. data/app/components/solidus_admin/store_credit_reasons/index/component.yml +0 -4
  224. data/app/components/solidus_admin/stores/index/component.html.erb +0 -34
  225. data/app/components/solidus_admin/stores/index/component.yml +0 -4
  226. data/app/components/solidus_admin/tax_categories/index/component.html.erb +0 -32
  227. data/app/components/solidus_admin/tax_categories/index/component.yml +0 -6
  228. data/app/components/solidus_admin/tax_rates/index/component.html.erb +0 -32
  229. data/app/components/solidus_admin/tax_rates/index/component.yml +0 -4
  230. data/app/components/solidus_admin/taxes/component.html.erb +0 -24
  231. data/app/components/solidus_admin/taxonomies/index/component.html.erb +0 -28
  232. data/app/components/solidus_admin/taxonomies/index/component.yml +0 -4
  233. data/app/components/solidus_admin/users/index/component.html.erb +0 -34
  234. data/app/components/solidus_admin/zones/index/component.html.erb +0 -35
  235. data/app/components/solidus_admin/zones/index/component.yml +0 -4
  236. data/app/controllers/solidus_admin/promotion_categories_controller.rb +0 -38
  237. data/app/controllers/solidus_admin/promotions_controller.rb +0 -46
  238. data/config/locales/promotion_categories.en.yml +0 -6
  239. data/config/locales/promotions.en.yml +0 -6
  240. data/config/locales/refund_reasons_.en.yml +0 -6
  241. /data/app/components/solidus_admin/{option_types → ui/pages}/index/component.yml +0 -0
@@ -0,0 +1,17 @@
1
+ <%= turbo_frame_tag :new_shipping_category_modal do %>
2
+ <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
3
+ <%= form_for @shipping_category, url: solidus_admin.shipping_categories_path(page: params[:page], q: params[:q]), 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) %>
6
+ </div>
7
+ <% modal.with_actions do %>
8
+ <form method="dialog">
9
+ <%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
10
+ </form>
11
+ <%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
12
+ <% end %>
13
+ <% end %>
14
+ <% end %>
15
+ <% end %>
16
+
17
+ <%= render component("shipping_categories/index").new(page: @page) %>
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::ShippingCategories::New::Component < SolidusAdmin::ShippingCategories::Index::Component
4
+ def initialize(page:, shipping_category:)
5
+ @page = page
6
+ @shipping_category = shipping_category
7
+ end
8
+
9
+ def form_id
10
+ dom_id(@shipping_category, "#{stimulus_id}_new_shipping_category_form")
11
+ end
12
+ end
@@ -0,0 +1,6 @@
1
+ # Add your component translations here.
2
+ # Use the translation in the example in your template with `t(".hello")`.
3
+ en:
4
+ title: "New Shipping Category"
5
+ cancel: "Cancel"
6
+ submit: "Add Shipping Category"
@@ -1,28 +1,36 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class SolidusAdmin::ShippingMethods::Index::Component < SolidusAdmin::BaseComponent
4
- include SolidusAdmin::Layout::PageHelpers
3
+ class SolidusAdmin::ShippingMethods::Index::Component < SolidusAdmin::Shipping::Component
4
+ def model_class
5
+ Spree::ShippingMethod
6
+ end
5
7
 
6
- def initialize(page:)
7
- @page = page
8
+ def row_url(shipping_method)
9
+ spree.edit_admin_shipping_method_path(shipping_method)
8
10
  end
9
11
 
10
- def title
11
- Spree::ShippingMethod.model_name.human.pluralize
12
+ def search_url
13
+ solidus_admin.shipping_methods_path
12
14
  end
13
15
 
14
- def prev_page_path
15
- solidus_admin.url_for(**request.params, page: @page.number - 1, only_path: true) unless @page.first?
16
+ def search_key
17
+ :name_or_description_cont
16
18
  end
17
19
 
18
- def next_page_path
19
- solidus_admin.url_for(**request.params, page: @page.next_param, only_path: true) unless @page.last?
20
+ def page_actions
21
+ render component("ui/button").new(
22
+ tag: :a,
23
+ text: t('.add'),
24
+ href: spree.new_admin_shipping_method_path,
25
+ icon: "add-line",
26
+ class: "align-self-end w-full",
27
+ )
20
28
  end
21
29
 
22
30
  def batch_actions
23
31
  [
24
32
  {
25
- display_name: t('.batch_actions.delete'),
33
+ label: t('.batch_actions.delete'),
26
34
  action: solidus_admin.shipping_methods_path,
27
35
  method: :delete,
28
36
  icon: 'delete-bin-7-line',
@@ -30,14 +38,6 @@ class SolidusAdmin::ShippingMethods::Index::Component < SolidusAdmin::BaseCompon
30
38
  ]
31
39
  end
32
40
 
33
- def scopes
34
- []
35
- end
36
-
37
- def filters
38
- []
39
- end
40
-
41
41
  def columns
42
42
  [
43
43
  {
@@ -3,85 +3,79 @@
3
3
  data-<%= stimulus_id %>-initial-count-on-hand-value="<%= @stock_item.count_on_hand_was || @stock_item.count_on_hand %>"
4
4
  data-action="input-><%= stimulus_id %>#updateCountOnHand"
5
5
  >
6
- <%= render component("ui/modal").new(title: t(".title"), close_path: solidus_admin.stock_items_path(page: params[:page], q: permitted_query_params)) do |modal| %>
7
- <%= form_for @stock_item, url: solidus_admin.stock_item_path(@stock_item), html: { id: form_id } do |f| %>
8
- <div class="flex flex-col gap-6 pb-4">
9
- <div class="flex gap-4">
10
- <%= link_to spree.edit_admin_product_variant_path(
11
- @stock_item.variant.product,
12
- @stock_item.variant,
13
- ), class: 'hover:bg-gray-25 rounded p-1 w-1/2 border border-gray-100' do %>
14
- <%= render component("ui/resource_item").new(
15
- thumbnail:
16
- (
17
- @stock_item.variant.images.first ||
18
- @stock_item.variant.product.gallery.images.first
19
- )&.url(:small),
20
- title: @stock_item.variant.name,
21
- subtitle:
22
- "#{@stock_item.variant.sku}#{@stock_item.variant.options_text.presence&.prepend(" - ")}",
23
- ) %>
24
- <% end %>
25
- <%= link_to spree.edit_admin_stock_location_path(@stock_item.stock_location), class: 'hover:bg-gray-25 rounded p-1 w-1/2 border border-gray-100' do %>
26
- <%= render component("ui/resource_item").new(
27
- title: @stock_item.stock_location.name,
28
- subtitle: "#{Spree::StockLocation.model_name.human} #{@stock_item.stock_location.code}",
6
+ <%= turbo_frame_tag :edit_stock_item_modal do %>
7
+ <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
8
+ <%= form_for @stock_item, url: solidus_admin.stock_item_path(@stock_item), html: { id: form_id } do |f| %>
9
+ <div class="flex flex-col gap-6 pb-4">
10
+ <div class="flex gap-4">
11
+ <%= link_to spree.edit_admin_product_variant_path(
12
+ @stock_item.variant.product,
13
+ @stock_item.variant,
14
+ ), class: 'hover:bg-gray-25 rounded p-1 w-1/2 border border-gray-100' do %>
15
+ <%= render component("ui/resource_item").new(
16
+ thumbnail:
17
+ (
18
+ @stock_item.variant.images.first ||
19
+ @stock_item.variant.product.gallery.images.first
20
+ )&.url(:small),
21
+ title: @stock_item.variant.name,
22
+ subtitle:
23
+ "#{@stock_item.variant.sku}#{@stock_item.variant.options_text.presence&.prepend(" - ")}",
24
+ ) %>
25
+ <% end %>
26
+ <%= link_to spree.edit_admin_stock_location_path(@stock_item.stock_location), class: 'hover:bg-gray-25 rounded p-1 w-1/2 border border-gray-100' do %>
27
+ <%= render component("ui/resource_item").new(
28
+ title: @stock_item.stock_location.name,
29
+ subtitle: "#{Spree::StockLocation.model_name.human} #{@stock_item.stock_location.code}",
30
+ ) %>
31
+ <% end %>
32
+ </div>
33
+
34
+ <%= render component("ui/forms/field").text_field(
35
+ f,
36
+ :count_on_hand,
37
+ disabled: true,
38
+ value: @stock_item.count_on_hand_was || @stock_item.count_on_hand,
39
+ "data-#{stimulus_id}-target": 'countOnHand',
40
+ ) %>
41
+ <%= render component("ui/forms/field").new(
42
+ label: t(".quantity_adjustment"),
43
+ hint: t(".quantity_adjustment_hint_html"),
44
+ ) do %>
45
+ <%= render component("ui/forms/input").new(
46
+ value: params[:quantity_adjustment] || 0,
47
+ name: :quantity_adjustment,
48
+ type: :number,
49
+ step: 1,
50
+ "data-#{stimulus_id}-target": 'quantityAdjustment',
29
51
  ) %>
30
52
  <% end %>
53
+
54
+ <%= render component("ui/forms/switch_field").new(
55
+ name: "#{f.object_name}[backorderable]",
56
+ label: Spree::StockItem.human_attribute_name(:backorderable),
57
+ error: f.object.errors[:backorderable],
58
+ hint: t(".backorderable_hint_html"),
59
+ checked: f.object.backorderable?,
60
+ include_hidden: true,
61
+ ) %>
31
62
  </div>
63
+ <% end %>
32
64
 
33
- <%= render component("ui/forms/field").text_field(
34
- f,
35
- :count_on_hand,
36
- disabled: true,
37
- value: @stock_item.count_on_hand_was || @stock_item.count_on_hand,
38
- "data-#{stimulus_id}-target": 'countOnHand',
39
- ) %>
40
- <%= render component("ui/forms/field").new(
41
- label: t(".quantity_adjustment"),
42
- hint: t(".quantity_adjustment_hint_html"),
43
- ) do %>
44
- <%= render component("ui/forms/input").new(
45
- value: params[:quantity_adjustment] || 0,
46
- name: :quantity_adjustment,
47
- type: :number,
48
- step: 1,
49
- "data-#{stimulus_id}-target": 'quantityAdjustment',
65
+ <% modal.with_actions do %>
66
+ <form method="dialog">
67
+ <%= render component("ui/button").new(
68
+ scheme: :secondary,
69
+ text: t(".cancel"),
50
70
  ) %>
51
- <% end %>
71
+ </form>
52
72
 
53
- <%= render component("ui/forms/switch_field").new(
54
- name: "#{f.object_name}[backorderable]",
55
- label: Spree::StockItem.human_attribute_name(:backorderable),
56
- error: f.object.errors[:backorderable],
57
- hint: t(".backorderable_hint_html"),
58
- checked: f.object.backorderable?,
59
- include_hidden: true,
73
+ <%= render component("ui/button").new(
74
+ tag: :button,
75
+ text: t(".submit"),
76
+ form: form_id,
60
77
  ) %>
61
-
62
- <% if params[:q] %>
63
- <%= f.hidden_field :q, value: params[:q].to_json, id: false %>
64
- <% end %>
65
-
66
- <% if params[:page] %>
67
- <%= f.hidden_field :page, value: params[:page], id: false %>
68
- <% end %>
69
- </div>
70
- <% end %>
71
-
72
- <% modal.with_actions do %>
73
- <%= render component("ui/button").new(
74
- tag: :a,
75
- scheme: :secondary,
76
- text: t(".cancel"),
77
- href: solidus_admin.stock_items_path(page: params[:page], q: params[:q]),
78
- ) %>
79
-
80
- <%= render component("ui/button").new(
81
- tag: :button,
82
- text: t(".submit"),
83
- form: form_id,
84
- ) %>
78
+ <% end %>
85
79
  <% end %>
86
80
  <% end %>
87
81
 
@@ -15,9 +15,4 @@ class SolidusAdmin::StockItems::Edit::Component < SolidusAdmin::BaseComponent
15
15
  def form_id
16
16
  "#{stimulus_id}-#{dom_id(@stock_item)}"
17
17
  end
18
-
19
- def permitted_query_params
20
- return params[:q].permit! if params[:q].respond_to?(:permit)
21
- {}
22
- end
23
18
  end
@@ -1,26 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class SolidusAdmin::StockItems::Index::Component < SolidusAdmin::BaseComponent
4
- include SolidusAdmin::Layout::PageHelpers
5
-
6
- def initialize(page:)
7
- @page = page
8
- end
9
-
10
- def title
11
- Spree::StockItem.model_name.human.pluralize
3
+ class SolidusAdmin::StockItems::Index::Component < SolidusAdmin::UI::Pages::Index::Component
4
+ def model_class
5
+ Spree::StockItem
12
6
  end
13
7
 
14
- def prev_page_path
15
- solidus_admin.url_for(**request.params, page: @page.number - 1, only_path: true) unless @page.first?
8
+ def search_key
9
+ :variant_product_name_or_variant_sku_or_variant_option_values_name_or_variant_option_values_presentation_cont
16
10
  end
17
11
 
18
- def next_page_path
19
- solidus_admin.url_for(**request.params, page: @page.next_param, only_path: true) unless @page.last?
12
+ def search_url
13
+ solidus_admin.stock_items_path
20
14
  end
21
15
 
22
- def batch_actions
23
- []
16
+ def row_url(stock_item)
17
+ solidus_admin.edit_stock_item_path(stock_item, _turbo_frame: :edit_stock_item_modal)
24
18
  end
25
19
 
26
20
  def scopes
@@ -36,7 +30,7 @@ class SolidusAdmin::StockItems::Index::Component < SolidusAdmin::BaseComponent
36
30
  def filters
37
31
  [
38
32
  {
39
- presentation: t('.filters.stock_locations'),
33
+ label: t('.filters.stock_locations'),
40
34
  combinator: 'or',
41
35
  attribute: "stock_location_id",
42
36
  predicate: "eq",
@@ -48,7 +42,7 @@ class SolidusAdmin::StockItems::Index::Component < SolidusAdmin::BaseComponent
48
42
  end
49
43
  },
50
44
  {
51
- presentation: t('.filters.variants'),
45
+ label: t('.filters.variants'),
52
46
  combinator: 'or',
53
47
  attribute: "variant_id",
54
48
  predicate: "eq",
@@ -173,8 +167,7 @@ class SolidusAdmin::StockItems::Index::Component < SolidusAdmin::BaseComponent
173
167
  }
174
168
  end
175
169
 
176
- def permitted_query_params
177
- return params[:q].permit! if params[:q].respond_to?(:permit)
178
- {}
170
+ def turbo_frames
171
+ %w[edit_stock_item_modal]
179
172
  end
180
173
  end
@@ -1,28 +1,36 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class SolidusAdmin::StockLocations::Index::Component < SolidusAdmin::BaseComponent
4
- include SolidusAdmin::Layout::PageHelpers
3
+ class SolidusAdmin::StockLocations::Index::Component < SolidusAdmin::Shipping::Component
4
+ def model_class
5
+ Spree::StockLocation
6
+ end
5
7
 
6
- def initialize(page:)
7
- @page = page
8
+ def actions
9
+ render component("ui/button").new(
10
+ tag: :a,
11
+ text: t('.add'),
12
+ href: spree.new_admin_stock_location_path,
13
+ icon: "add-line",
14
+ class: "align-self-end w-full",
15
+ )
8
16
  end
9
17
 
10
- def title
11
- Spree::StockLocation.model_name.human.pluralize
18
+ def row_url(stock_location)
19
+ spree.edit_admin_stock_location_path(stock_location)
12
20
  end
13
21
 
14
- def prev_page_path
15
- solidus_admin.url_for(**request.params, page: @page.number - 1, only_path: true) unless @page.first?
22
+ def search_url
23
+ solidus_admin.stock_locations_path
16
24
  end
17
25
 
18
- def next_page_path
19
- solidus_admin.url_for(**request.params, page: @page.next_param, only_path: true) unless @page.last?
26
+ def search_key
27
+ :name_or_description_cont
20
28
  end
21
29
 
22
30
  def batch_actions
23
31
  [
24
32
  {
25
- display_name: t('.batch_actions.delete'),
33
+ label: t('.batch_actions.delete'),
26
34
  action: solidus_admin.stock_locations_path,
27
35
  method: :delete,
28
36
  icon: 'delete-bin-7-line',
@@ -1,6 +1,3 @@
1
1
  en:
2
2
  active: 'Active'
3
3
  inactive: 'Inactive'
4
- add: 'Add new'
5
- batch_actions:
6
- delete: 'Delete'
@@ -0,0 +1,26 @@
1
+ <%= turbo_frame_tag :edit_store_credit_reason_modal do %>
2
+ <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
3
+ <%= form_for @store_credit_reason, url: solidus_admin.store_credit_reason_path(@store_credit_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::StoreCreditReason.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("store_credit_reasons/index").new(page: @page) %>
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::StoreCreditReasons::Edit::Component < SolidusAdmin::BaseComponent
4
+ def initialize(page:, store_credit_reason:)
5
+ @page = page
6
+ @store_credit_reason = store_credit_reason
7
+ end
8
+
9
+ def form_id
10
+ dom_id(@store_credit_reason, "#{stimulus_id}_edit_store_credit_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 Store Credit Reason"
5
+ cancel: "Cancel"
6
+ submit: "Update Store Credit Reason"
7
+ hints:
8
+ active: "When checked, this store credit reason will be available for selection when adding store credit to orders."
@@ -1,28 +1,43 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class SolidusAdmin::StoreCreditReasons::Index::Component < SolidusAdmin::BaseComponent
4
- include SolidusAdmin::Layout::PageHelpers
3
+ class SolidusAdmin::StoreCreditReasons::Index::Component < SolidusAdmin::RefundsAndReturns::Component
4
+ def model_class
5
+ Spree::StoreCreditReason
6
+ end
7
+
8
+ def page_actions
9
+ render component("ui/button").new(
10
+ tag: :a,
11
+ text: t('.add'),
12
+ href: solidus_admin.new_store_credit_reason_path, data: { turbo_frame: :new_store_credit_reason_modal },
13
+ icon: "add-line",
14
+ class: "align-self-end w-full",
15
+ )
16
+ end
5
17
 
6
- def initialize(page:)
7
- @page = page
18
+ def turbo_frames
19
+ %w[
20
+ new_store_credit_reason_modal
21
+ edit_store_credit_reason_modal
22
+ ]
8
23
  end
9
24
 
10
- def title
11
- Spree::StoreCreditReason.model_name.human.pluralize
25
+ def row_url(store_credit_reason)
26
+ spree.edit_admin_store_credit_reason_path(store_credit_reason, _turbo_frame: :edit_store_credit_reason_modal)
12
27
  end
13
28
 
14
- def prev_page_path
15
- solidus_admin.url_for(**request.params, page: @page.number - 1, only_path: true) unless @page.first?
29
+ def search_url
30
+ solidus_admin.store_credit_reasons_path
16
31
  end
17
32
 
18
- def next_page_path
19
- solidus_admin.url_for(**request.params, page: @page.next_param, only_path: true) unless @page.last?
33
+ def search_key
34
+ :name_cont
20
35
  end
21
36
 
22
37
  def batch_actions
23
38
  [
24
39
  {
25
- display_name: t('.batch_actions.delete'),
40
+ label: t('.batch_actions.delete'),
26
41
  action: solidus_admin.store_credit_reasons_path,
27
42
  method: :delete,
28
43
  icon: 'delete-bin-7-line',
@@ -30,14 +45,6 @@ class SolidusAdmin::StoreCreditReasons::Index::Component < SolidusAdmin::BaseCom
30
45
  ]
31
46
  end
32
47
 
33
- def scopes
34
- []
35
- end
36
-
37
- def filters
38
- []
39
- end
40
-
41
48
  def columns
42
49
  [
43
50
  :name,
@@ -0,0 +1,27 @@
1
+ <%= turbo_frame_tag :new_store_credit_reason_modal do %>
2
+ <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
3
+ <%= form_for @store_credit_reason, url: solidus_admin.store_credit_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::StoreCreditReason.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("store_credit_reasons/index").new(page: @page) %>
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::StoreCreditReasons::New::Component < SolidusAdmin::BaseComponent
4
+ def initialize(page:, store_credit_reason:)
5
+ @page = page
6
+ @store_credit_reason = store_credit_reason
7
+ end
8
+
9
+ def form_id
10
+ dom_id(@store_credit_reason, "#{stimulus_id}_new_store_credit_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 Store Credit Reason"
5
+ cancel: "Cancel"
6
+ submit: "Add Store Credit Reason"
7
+ hints:
8
+ active: "When checked, this store credit reason will be available for selection when adding store credit to orders."
@@ -1,28 +1,35 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class SolidusAdmin::Stores::Index::Component < SolidusAdmin::BaseComponent
4
- include SolidusAdmin::Layout::PageHelpers
3
+ class SolidusAdmin::Stores::Index::Component < SolidusAdmin::UI::Pages::Index::Component
4
+ def model_class
5
+ Spree::Store
6
+ end
5
7
 
6
- def initialize(page:)
7
- @page = page
8
+ def search_key
9
+ :name_or_url_or_code_cont
8
10
  end
9
11
 
10
- def title
11
- Spree::Store.model_name.human.pluralize
12
+ def search_url
13
+ solidus_admin.stores_path
12
14
  end
13
15
 
14
- def prev_page_path
15
- solidus_admin.url_for(**request.params, page: @page.number - 1, only_path: true) unless @page.first?
16
+ def row_url(store)
17
+ spree.edit_admin_store_path(store)
16
18
  end
17
19
 
18
- def next_page_path
19
- solidus_admin.url_for(**request.params, page: @page.next_param, only_path: true) unless @page.last?
20
+ def page_actions
21
+ render component("ui/button").new(
22
+ tag: :a,
23
+ text: t('.add'),
24
+ href: spree.new_admin_store_path,
25
+ icon: "add-line",
26
+ )
20
27
  end
21
28
 
22
29
  def batch_actions
23
30
  [
24
31
  {
25
- display_name: t('.batch_actions.delete'),
32
+ label: t('.batch_actions.delete'),
26
33
  action: solidus_admin.stores_path,
27
34
  method: :delete,
28
35
  icon: 'delete-bin-7-line',
@@ -30,14 +37,6 @@ class SolidusAdmin::Stores::Index::Component < SolidusAdmin::BaseComponent
30
37
  ]
31
38
  end
32
39
 
33
- def scopes
34
- []
35
- end
36
-
37
- def filters
38
- []
39
- end
40
-
41
40
  def columns
42
41
  [
43
42
  :name,
@@ -0,0 +1,28 @@
1
+ <%= turbo_frame_tag :edit_tax_category_modal do %>
2
+ <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
3
+ <%= form_for @tax_category, url: solidus_admin.tax_category_path(@tax_category), 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) %>
6
+ <%= render component("ui/forms/field").text_field(f, :tax_code) %>
7
+ <%= render component("ui/forms/field").text_field(f, :description) %>
8
+ <label class="flex gap-2 items-center">
9
+ <%= render component("ui/forms/checkbox").new(
10
+ name: "#{f.object_name}[is_default]",
11
+ value: "1",
12
+ checked: f.object.is_default
13
+ ) %>
14
+ <span class="font-semibold text-xs ml-2"><%= Spree::TaxCategory.human_attribute_name :is_default %></span>
15
+ <%= render component("ui/toggletip").new(text: t(".hints.is_default")) %>
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
+
28
+ <%= render component("tax_categories/index").new(page: @page) %>