solidus_admin 0.4.1 → 0.5.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 (335) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +23 -4
  3. data/README.md +6 -1
  4. data/Rakefile +15 -15
  5. data/app/assets/builds/solidus_admin/tailwind.css +721 -44
  6. data/app/assets/images/solidus_admin/remixicon.license.txt +196 -0
  7. data/app/assets/images/solidus_admin/remixicon.symbol.svg +4 -4
  8. data/app/blueprints/solidus_admin/state_blueprint.rb +13 -0
  9. data/app/components/concerns/solidus_admin/slotable_default.rb +42 -0
  10. data/app/components/solidus_admin/adjustment_reasons/edit/component.html.erb +6 -15
  11. data/app/components/solidus_admin/adjustment_reasons/edit/component.yml +0 -1
  12. data/app/components/solidus_admin/adjustment_reasons/index/component.rb +13 -13
  13. data/app/components/solidus_admin/adjustment_reasons/new/component.html.erb +6 -15
  14. data/app/components/solidus_admin/adjustment_reasons/new/component.yml +0 -1
  15. data/app/components/solidus_admin/base_component.rb +7 -3
  16. data/app/components/solidus_admin/layout/confirm/component.html.erb +18 -0
  17. data/app/components/solidus_admin/layout/confirm/component.js +21 -0
  18. data/app/components/solidus_admin/layout/confirm/component.rb +26 -0
  19. data/app/components/solidus_admin/layout/confirm/component.yml +4 -0
  20. data/app/components/solidus_admin/layout/flashes/alerts/component.html.erb +7 -0
  21. data/app/components/solidus_admin/layout/flashes/alerts/component.rb +19 -0
  22. data/app/components/solidus_admin/layout/flashes/component.html.erb +5 -0
  23. data/app/components/solidus_admin/layout/flashes/component.rb +4 -0
  24. data/app/components/solidus_admin/layout/flashes/toasts/component.html.erb +5 -0
  25. data/app/components/solidus_admin/layout/flashes/toasts/component.rb +9 -0
  26. data/app/components/solidus_admin/layout/navigation/account/component.html.erb +12 -1
  27. data/app/components/solidus_admin/layout/navigation/account/component.rb +4 -4
  28. data/app/components/solidus_admin/layout/page_helpers.rb +3 -9
  29. data/app/components/solidus_admin/layout/skip_link/component.rb +3 -3
  30. data/app/components/solidus_admin/option_types/edit/component.html.erb +44 -0
  31. data/app/components/solidus_admin/option_types/edit/component.rb +5 -0
  32. data/app/components/solidus_admin/option_types/edit/component.yml +10 -0
  33. data/app/components/solidus_admin/option_types/index/component.rb +22 -22
  34. data/app/components/solidus_admin/option_types/new/component.html.erb +16 -0
  35. data/app/components/solidus_admin/option_types/new/component.rb +4 -0
  36. data/app/components/solidus_admin/option_types/new/component.yml +4 -0
  37. data/app/components/solidus_admin/option_values/edit/component.html.erb +16 -0
  38. data/app/components/solidus_admin/option_values/edit/component.rb +4 -0
  39. data/app/components/solidus_admin/option_values/edit/component.yml +4 -0
  40. data/app/components/solidus_admin/option_values/new/component.html.erb +16 -0
  41. data/app/components/solidus_admin/option_values/new/component.rb +7 -0
  42. data/app/components/solidus_admin/option_values/new/component.yml +4 -0
  43. data/app/components/solidus_admin/option_values/table/component.rb +53 -0
  44. data/app/components/solidus_admin/option_values/table/component.yml +3 -0
  45. data/app/components/solidus_admin/orders/cart/component.html.erb +5 -7
  46. data/app/components/solidus_admin/orders/cart/result/component.html.erb +2 -2
  47. data/app/components/solidus_admin/orders/index/component.rb +26 -26
  48. data/app/components/solidus_admin/orders/show/address/component.html.erb +8 -20
  49. data/app/components/solidus_admin/orders/show/address/component.rb +7 -7
  50. data/app/components/solidus_admin/orders/show/address/component.yml +0 -1
  51. data/app/components/solidus_admin/orders/show/adjustments/index/adjustable/spree_shipment/component.rb +1 -1
  52. data/app/components/solidus_admin/orders/show/adjustments/index/component.rb +24 -21
  53. data/app/components/solidus_admin/orders/show/component.html.erb +2 -2
  54. data/app/components/solidus_admin/orders/show/component.rb +1 -1
  55. data/app/components/solidus_admin/orders/show/component.yml +0 -3
  56. data/app/components/solidus_admin/orders/show/customer_search/result/component.html.erb +2 -2
  57. data/app/components/solidus_admin/orders/show/email/component.html.erb +2 -2
  58. data/app/components/solidus_admin/payment_methods/edit/component.html.erb +13 -0
  59. data/app/components/solidus_admin/payment_methods/edit/component.rb +7 -0
  60. data/app/components/solidus_admin/payment_methods/edit/component.yml +2 -0
  61. data/app/components/solidus_admin/payment_methods/form/component.html.erb +29 -0
  62. data/app/components/solidus_admin/payment_methods/form/component.rb +34 -0
  63. data/app/components/solidus_admin/payment_methods/form/component.yml +15 -0
  64. data/app/components/solidus_admin/payment_methods/index/component.rb +24 -23
  65. data/app/components/solidus_admin/payment_methods/new/component.html.erb +12 -0
  66. data/app/components/solidus_admin/payment_methods/new/component.rb +7 -0
  67. data/app/components/solidus_admin/payment_methods/new/component.yml +2 -0
  68. data/app/components/solidus_admin/products/index/component.rb +26 -26
  69. data/app/components/solidus_admin/products/show/categories/new/component.html.erb +17 -0
  70. data/app/components/solidus_admin/products/show/categories/new/component.rb +17 -0
  71. data/app/components/solidus_admin/products/show/categories/new/component.yml +5 -0
  72. data/app/components/solidus_admin/products/show/component.html.erb +90 -66
  73. data/app/components/solidus_admin/products/show/component.rb +2 -2
  74. data/app/components/solidus_admin/products/show/component.yml +23 -11
  75. data/app/components/solidus_admin/products/status/component.rb +1 -1
  76. data/app/components/solidus_admin/products/stock/component.rb +7 -7
  77. data/app/components/solidus_admin/properties/edit/component.html.erb +5 -5
  78. data/app/components/solidus_admin/properties/index/component.rb +13 -13
  79. data/app/components/solidus_admin/properties/new/component.html.erb +5 -5
  80. data/app/components/solidus_admin/refund_reasons/edit/component.html.erb +6 -15
  81. data/app/components/solidus_admin/refund_reasons/edit/component.yml +0 -1
  82. data/app/components/solidus_admin/refund_reasons/index/component.rb +13 -13
  83. data/app/components/solidus_admin/refund_reasons/new/component.html.erb +6 -14
  84. data/app/components/solidus_admin/refund_reasons/new/component.yml +0 -1
  85. data/app/components/solidus_admin/refunds_and_returns/component.rb +7 -7
  86. data/app/components/solidus_admin/reimbursement_types/index/component.rb +2 -2
  87. data/app/components/solidus_admin/return_reasons/edit/component.html.erb +5 -14
  88. data/app/components/solidus_admin/return_reasons/index/component.rb +11 -11
  89. data/app/components/solidus_admin/return_reasons/new/component.html.erb +5 -14
  90. data/app/components/solidus_admin/roles/edit/component.html.erb +12 -12
  91. data/app/components/solidus_admin/roles/edit/component.yml +0 -1
  92. data/app/components/solidus_admin/roles/index/component.rb +12 -12
  93. data/app/components/solidus_admin/roles/new/component.html.erb +12 -12
  94. data/app/components/solidus_admin/roles/new/component.yml +0 -1
  95. data/app/components/solidus_admin/shipping/component.rb +5 -5
  96. data/app/components/solidus_admin/shipping_categories/edit/component.html.erb +4 -4
  97. data/app/components/solidus_admin/shipping_categories/edit/component.yml +0 -1
  98. data/app/components/solidus_admin/shipping_categories/index/component.rb +9 -9
  99. data/app/components/solidus_admin/shipping_categories/new/component.html.erb +4 -4
  100. data/app/components/solidus_admin/shipping_categories/new/component.yml +0 -1
  101. data/app/components/solidus_admin/shipping_methods/index/component.rb +10 -10
  102. data/app/components/solidus_admin/stock_items/edit/component.html.erb +5 -8
  103. data/app/components/solidus_admin/stock_items/edit/component.rb +2 -2
  104. data/app/components/solidus_admin/stock_items/index/component.rb +25 -25
  105. data/app/components/solidus_admin/stock_locations/edit/component.html.erb +16 -0
  106. data/app/components/solidus_admin/stock_locations/edit/component.rb +5 -0
  107. data/app/components/solidus_admin/stock_locations/edit/component.yml +2 -0
  108. data/app/components/solidus_admin/stock_locations/form/component.html.erb +65 -0
  109. data/app/components/solidus_admin/stock_locations/form/component.rb +11 -0
  110. data/app/components/solidus_admin/stock_locations/form/component.yml +19 -0
  111. data/app/components/solidus_admin/stock_locations/index/component.rb +94 -47
  112. data/app/components/solidus_admin/stock_locations/new/component.html.erb +16 -0
  113. data/app/components/solidus_admin/stock_locations/new/component.rb +16 -0
  114. data/app/components/solidus_admin/stock_locations/new/component.yml +2 -0
  115. data/app/components/solidus_admin/store_credit_reasons/edit/component.html.erb +5 -14
  116. data/app/components/solidus_admin/store_credit_reasons/edit/component.yml +0 -1
  117. data/app/components/solidus_admin/store_credit_reasons/index/component.rb +11 -11
  118. data/app/components/solidus_admin/store_credit_reasons/new/component.html.erb +5 -14
  119. data/app/components/solidus_admin/store_credit_reasons/new/component.yml +0 -1
  120. data/app/components/solidus_admin/stores/edit/component.html.erb +27 -0
  121. data/app/components/solidus_admin/stores/edit/component.rb +5 -0
  122. data/app/components/solidus_admin/stores/form/component.html.erb +102 -0
  123. data/app/components/solidus_admin/stores/form/component.rb +27 -0
  124. data/app/components/solidus_admin/stores/form/component.yml +17 -0
  125. data/app/components/solidus_admin/stores/index/component.rb +51 -22
  126. data/app/components/solidus_admin/stores/new/component.html.erb +16 -0
  127. data/app/components/solidus_admin/stores/new/component.rb +5 -0
  128. data/app/components/solidus_admin/stores/new/component.yml +2 -0
  129. data/app/components/solidus_admin/tax_categories/edit/component.html.erb +7 -15
  130. data/app/components/solidus_admin/tax_categories/edit/component.yml +0 -1
  131. data/app/components/solidus_admin/tax_categories/index/component.rb +17 -17
  132. data/app/components/solidus_admin/tax_categories/new/component.html.erb +7 -15
  133. data/app/components/solidus_admin/tax_categories/new/component.yml +0 -1
  134. data/app/components/solidus_admin/tax_rates/edit/component.html.erb +12 -0
  135. data/app/components/solidus_admin/tax_rates/edit/component.rb +5 -0
  136. data/app/components/solidus_admin/tax_rates/edit/component.yml +4 -0
  137. data/app/components/solidus_admin/tax_rates/form/component.html.erb +25 -0
  138. data/app/components/solidus_admin/tax_rates/form/component.rb +29 -0
  139. data/app/components/solidus_admin/tax_rates/form/component.yml +9 -0
  140. data/app/components/solidus_admin/tax_rates/index/component.rb +38 -20
  141. data/app/components/solidus_admin/tax_rates/new/component.html.erb +12 -0
  142. data/app/components/solidus_admin/tax_rates/new/component.rb +5 -0
  143. data/app/components/solidus_admin/tax_rates/new/component.yml +4 -0
  144. data/app/components/solidus_admin/taxes/component.rb +4 -4
  145. data/app/components/solidus_admin/taxonomies/index/component.rb +7 -7
  146. data/app/components/solidus_admin/turbo/target_frame/component.html.erb +5 -0
  147. data/app/components/solidus_admin/turbo/target_frame/component.rb +8 -0
  148. data/app/components/solidus_admin/ui/alert/component.html.erb +35 -0
  149. data/app/components/solidus_admin/ui/alert/component.rb +51 -0
  150. data/app/components/solidus_admin/ui/alert/component.yml +8 -0
  151. data/app/components/solidus_admin/ui/badge/component.rb +11 -11
  152. data/app/components/solidus_admin/ui/button/component.rb +84 -27
  153. data/app/components/solidus_admin/ui/button/component.yml +10 -0
  154. data/app/components/solidus_admin/ui/checkbox/component.rb +42 -0
  155. data/app/components/solidus_admin/ui/dropdown/component.rb +3 -3
  156. data/app/components/solidus_admin/ui/forms/address/component.html.erb +1 -48
  157. data/app/components/solidus_admin/ui/forms/address/component.rb +29 -6
  158. data/app/components/solidus_admin/ui/forms/address/fields/city_and_zipcode/component.html.erb +4 -0
  159. data/app/components/solidus_admin/ui/forms/address/fields/city_and_zipcode/component.rb +8 -0
  160. data/app/components/solidus_admin/ui/forms/address/fields/country_and_state/component.html.erb +39 -0
  161. data/app/components/solidus_admin/ui/forms/address/{component.js → fields/country_and_state/component.js} +2 -0
  162. data/app/components/solidus_admin/ui/forms/address/fields/country_and_state/component.rb +15 -0
  163. data/app/components/solidus_admin/ui/forms/address/fields/reverse_charge_fields/component.html.erb +7 -0
  164. data/app/components/solidus_admin/ui/forms/address/fields/reverse_charge_fields/component.rb +12 -0
  165. data/app/components/solidus_admin/ui/forms/address/fieldsets/base.rb +54 -0
  166. data/app/components/solidus_admin/ui/forms/address/fieldsets/contact/component.rb +16 -0
  167. data/app/components/solidus_admin/ui/forms/address/fieldsets/contact_info/component.rb +10 -0
  168. data/app/components/solidus_admin/ui/forms/address/fieldsets/location/component.rb +14 -0
  169. data/app/components/solidus_admin/ui/forms/checkbox/component.html.erb +14 -0
  170. data/app/components/solidus_admin/ui/forms/checkbox/component.rb +24 -31
  171. data/app/components/solidus_admin/ui/forms/field/component.html.erb +4 -4
  172. data/app/components/solidus_admin/ui/forms/field/component.rb +14 -18
  173. data/app/components/solidus_admin/ui/forms/input/component.rb +9 -18
  174. data/app/components/solidus_admin/ui/forms/search/result/component.rb +2 -2
  175. data/app/components/solidus_admin/ui/forms/select/component.html.erb +21 -0
  176. data/app/components/solidus_admin/ui/forms/select/component.rb +157 -0
  177. data/app/components/solidus_admin/ui/forms/switch/component.rb +4 -4
  178. data/app/components/solidus_admin/ui/icon/component.rb +4 -4
  179. data/app/components/solidus_admin/ui/icon/names.txt +973 -238
  180. data/app/components/solidus_admin/ui/modal/component.html.erb +2 -4
  181. data/app/components/solidus_admin/ui/modal/component.js +7 -1
  182. data/app/components/solidus_admin/ui/modal/component.rb +2 -2
  183. data/app/components/solidus_admin/ui/pages/index/component.rb +50 -19
  184. data/app/components/solidus_admin/ui/panel/component.rb +5 -9
  185. data/app/components/solidus_admin/ui/radio/component.rb +29 -0
  186. data/app/components/solidus_admin/ui/tab/component.rb +4 -4
  187. data/app/components/solidus_admin/ui/table/component.html.erb +11 -10
  188. data/app/components/solidus_admin/ui/table/component.js +18 -26
  189. data/app/components/solidus_admin/ui/table/component.rb +24 -18
  190. data/app/components/solidus_admin/ui/table/component.yml +1 -0
  191. data/app/components/solidus_admin/ui/table/ransack_filter/component.html.erb +1 -1
  192. data/app/components/solidus_admin/ui/table/ransack_filter/component.rb +7 -7
  193. data/app/components/solidus_admin/ui/thumbnail/component.rb +5 -5
  194. data/app/components/solidus_admin/ui/toast/component.html.erb +6 -6
  195. data/app/components/solidus_admin/ui/toast/component.rb +1 -1
  196. data/app/components/solidus_admin/ui/toggletip/component.rb +1 -1
  197. data/app/components/solidus_admin/users/addresses/component.html.erb +3 -5
  198. data/app/components/solidus_admin/users/addresses/component.rb +0 -30
  199. data/app/components/solidus_admin/users/addresses/component.yml +0 -7
  200. data/app/components/solidus_admin/users/edit/api_access/component.html.erb +6 -4
  201. data/app/components/solidus_admin/users/edit/api_access/component.yml +8 -2
  202. data/app/components/solidus_admin/users/edit/component.html.erb +15 -12
  203. data/app/components/solidus_admin/users/edit/component.rb +1 -33
  204. data/app/components/solidus_admin/users/edit/component.yml +0 -7
  205. data/app/components/solidus_admin/users/edit/tabs/component.rb +46 -0
  206. data/app/components/solidus_admin/users/edit/tabs/component.yml +6 -0
  207. data/app/components/solidus_admin/users/index/component.rb +20 -20
  208. data/app/components/solidus_admin/users/items/component.html.erb +1 -3
  209. data/app/components/solidus_admin/users/items/component.rb +17 -47
  210. data/app/components/solidus_admin/users/items/component.yml +0 -7
  211. data/app/components/solidus_admin/users/orders/component.html.erb +1 -3
  212. data/app/components/solidus_admin/users/orders/component.rb +9 -39
  213. data/app/components/solidus_admin/users/orders/component.yml +0 -6
  214. data/app/components/solidus_admin/users/store_credits/edit_amount/component.html.erb +7 -8
  215. data/app/components/solidus_admin/users/store_credits/edit_amount/component.rb +0 -5
  216. data/app/components/solidus_admin/users/store_credits/edit_amount/component.yml +0 -1
  217. data/app/components/solidus_admin/users/store_credits/edit_memo/component.html.erb +4 -4
  218. data/app/components/solidus_admin/users/store_credits/edit_memo/component.yml +0 -1
  219. data/app/components/solidus_admin/users/store_credits/edit_validity/component.html.erb +6 -7
  220. data/app/components/solidus_admin/users/store_credits/edit_validity/component.rb +0 -5
  221. data/app/components/solidus_admin/users/store_credits/index/component.html.erb +4 -6
  222. data/app/components/solidus_admin/users/store_credits/index/component.rb +10 -40
  223. data/app/components/solidus_admin/users/store_credits/index/component.yml +0 -6
  224. data/app/components/solidus_admin/users/store_credits/new/component.html.erb +12 -13
  225. data/app/components/solidus_admin/users/store_credits/new/component.rb +0 -9
  226. data/app/components/solidus_admin/users/store_credits/new/component.yml +0 -1
  227. data/app/components/solidus_admin/users/store_credits/show/component.html.erb +5 -7
  228. data/app/components/solidus_admin/users/store_credits/show/component.rb +8 -38
  229. data/app/components/solidus_admin/users/store_credits/show/component.yml +0 -6
  230. data/app/components/solidus_admin/users_and_roles/component.rb +4 -4
  231. data/app/components/solidus_admin/zones/edit/component.html.erb +1 -0
  232. data/app/components/solidus_admin/zones/edit/component.rb +4 -0
  233. data/app/components/solidus_admin/zones/form/component.html.erb +47 -0
  234. data/app/components/solidus_admin/zones/form/component.js +32 -0
  235. data/app/components/solidus_admin/zones/form/component.rb +23 -0
  236. data/app/components/solidus_admin/zones/form/component.yml +7 -0
  237. data/app/components/solidus_admin/zones/index/component.rb +57 -18
  238. data/app/components/solidus_admin/zones/new/component.html.erb +1 -0
  239. data/app/components/solidus_admin/zones/new/component.rb +4 -0
  240. data/app/controllers/concerns/solidus_admin/moveable.rb +31 -0
  241. data/app/controllers/solidus_admin/addresses_controller.rb +9 -11
  242. data/app/controllers/solidus_admin/adjustments_controller.rb +5 -6
  243. data/app/controllers/solidus_admin/base_controller.rb +8 -7
  244. data/app/controllers/solidus_admin/controller_helpers/authorization.rb +1 -1
  245. data/app/controllers/solidus_admin/controller_helpers/locale.rb +1 -1
  246. data/app/controllers/solidus_admin/controller_helpers/pagination.rb +37 -0
  247. data/app/controllers/solidus_admin/controller_helpers/search.rb +5 -5
  248. data/app/controllers/solidus_admin/controller_helpers/theme.rb +2 -2
  249. data/app/controllers/solidus_admin/customers_controller.rb +3 -3
  250. data/app/controllers/solidus_admin/line_items_controller.rb +3 -3
  251. data/app/controllers/solidus_admin/option_types_controller.rb +11 -32
  252. data/app/controllers/solidus_admin/option_values_controller.rb +54 -0
  253. data/app/controllers/solidus_admin/orders_controller.rb +25 -19
  254. data/app/controllers/solidus_admin/payment_methods_controller.rb +23 -28
  255. data/app/controllers/solidus_admin/product_option_types_controller.rb +5 -0
  256. data/app/controllers/solidus_admin/product_taxons_controller.rb +58 -0
  257. data/app/controllers/solidus_admin/products_controller.rb +24 -28
  258. data/app/controllers/solidus_admin/reimbursement_types_controller.rb +3 -3
  259. data/app/controllers/solidus_admin/resources_controller.rb +59 -20
  260. data/app/controllers/solidus_admin/shipping_methods_controller.rb +4 -4
  261. data/app/controllers/solidus_admin/states_controller.rb +30 -0
  262. data/app/controllers/solidus_admin/stock_items_controller.rb +11 -6
  263. data/app/controllers/solidus_admin/stock_locations_controller.rb +25 -26
  264. data/app/controllers/solidus_admin/store_credits_controller.rb +9 -9
  265. data/app/controllers/solidus_admin/stores_controller.rb +43 -9
  266. data/app/controllers/solidus_admin/tax_rates_controller.rb +9 -22
  267. data/app/controllers/solidus_admin/taxonomies_controller.rb +5 -21
  268. data/app/controllers/solidus_admin/users_controller.rb +16 -16
  269. data/app/controllers/solidus_admin/zones_controller.rb +6 -26
  270. data/app/helpers/solidus_admin/flash_helper.rb +14 -0
  271. data/app/helpers/solidus_admin/last_login_helper.rb +2 -2
  272. data/app/helpers/solidus_admin/permission_sets_helper.rb +3 -3
  273. data/app/helpers/solidus_admin/solidus_form_helper.rb +9 -0
  274. data/app/helpers/solidus_admin/stimulus_helper.rb +29 -0
  275. data/app/helpers/solidus_admin/void_elements_helper.rb +1 -1
  276. data/app/javascript/solidus_admin/application.js +10 -1
  277. data/app/javascript/solidus_admin/confirm_modal.js +24 -0
  278. data/app/javascript/solidus_admin/controllers/custom_validity_controller.js +12 -0
  279. data/app/javascript/solidus_admin/controllers/sortable_controller.js +9 -2
  280. data/app/javascript/solidus_admin/tom-select/plugins/patch_scroll.js +19 -0
  281. data/app/javascript/solidus_admin/tom-select/plugins/remote_with_pagination.js +67 -0
  282. data/app/javascript/solidus_admin/tom-select/plugins/stash_on_search.js +68 -0
  283. data/app/javascript/solidus_admin/tom-select/tom-select.js +11 -0
  284. data/app/javascript/solidus_admin/utils.js +40 -0
  285. data/app/javascript/solidus_admin/web_components/solidus_select.js +90 -0
  286. data/app/javascript/vendor/custom_elements.js +3 -0
  287. data/app/lib/solidus_admin/form_builder.rb +58 -0
  288. data/app/views/layouts/solidus_admin/application.html.erb +6 -8
  289. data/app/views/layouts/solidus_admin/preview.html.erb +1 -1
  290. data/app/views/solidus_admin/option_values/create.turbo_stream.erb +3 -0
  291. data/app/views/solidus_admin/option_values/destroy.turbo_stream.erb +3 -0
  292. data/app/views/solidus_admin/option_values/update.turbo_stream.erb +3 -0
  293. data/config/importmap.rb +9 -0
  294. data/config/initializers/view_component.rb +1 -1
  295. data/config/locales/option_types.en.yml +5 -1
  296. data/config/locales/option_values.en.yml +9 -0
  297. data/config/locales/payment_methods.en.yml +5 -1
  298. data/config/locales/product_taxons.en.yml +6 -0
  299. data/config/locales/products.en.yml +2 -0
  300. data/config/locales/solidus_select.yml +6 -0
  301. data/config/locales/stock_locations.en.yml +4 -0
  302. data/config/locales/stores.en.yml +22 -0
  303. data/config/locales/tax_rates.en.yml +4 -0
  304. data/config/locales/zones.en.yml +4 -0
  305. data/config/routes.rb +21 -9
  306. data/config/tailwind.config.js +6 -2
  307. data/docs/components.md +2 -2
  308. data/docs/index_pages.md +11 -5
  309. data/docs/stimulusjs.md +1 -1
  310. data/eslint.config.mjs +25 -0
  311. data/lib/generators/solidus_admin/component/component_generator.rb +10 -6
  312. data/lib/generators/solidus_admin/install/install_generator.rb +24 -5
  313. data/lib/generators/solidus_admin/install/templates/config/initializers/solidus_admin.rb.tt +6 -0
  314. data/lib/solidus_admin/admin_resources.rb +1 -1
  315. data/lib/solidus_admin/configuration.rb +14 -14
  316. data/lib/solidus_admin/engine.rb +3 -2
  317. data/lib/solidus_admin/importmap.rb +1 -1
  318. data/lib/solidus_admin/menu_item.rb +1 -1
  319. data/lib/solidus_admin/preview.rb +1 -0
  320. data/lib/solidus_admin/testing_support/admin_assets.rb +1 -1
  321. data/lib/solidus_admin/testing_support/feature_helpers.rb +77 -3
  322. data/lib/solidus_admin/testing_support/shared_examples/crud_resource_requests.rb +43 -36
  323. data/lib/solidus_admin/testing_support/shared_examples/moveable.rb +48 -0
  324. data/lib/solidus_admin/testing_support/shared_examples/promotion_categories_features.rb +5 -11
  325. data/lib/solidus_admin/version.rb +1 -1
  326. data/lib/tasks/tailwind.rake +1 -1
  327. data/solidus_admin.gemspec +24 -21
  328. metadata +172 -28
  329. data/.eslintrc.json +0 -7
  330. data/app/components/solidus_admin/products/show/component.js +0 -9
  331. data/app/components/solidus_admin/ui/forms/input/component.js +0 -15
  332. data/app/components/solidus_admin/users/edit/api_access/component.js +0 -9
  333. data/app/javascript/solidus_admin/controllers/confirm_controller.js +0 -21
  334. data/lib/solidus_admin/testing_support/shared_examples/bulk_delete_resources.rb +0 -20
  335. /data/app/{components/solidus_admin/ui/toast/component.js → javascript/solidus_admin/controllers/alert_animation_controller.js} +0 -0
@@ -1,13 +1,12 @@
1
- <%= turbo_frame_tag :resource_modal, target: "_top" do %>
1
+ <%= turbo_frame_tag :resource_form, target: "_top" do %>
2
2
  <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
3
- <%= form_for @store_credit, url: form_url, method: :put, html: { id: form_id } do |f| %>
3
+ <%= solidus_form_for @store_credit, url: form_url, method: :put, html: { id: form_id } do |f| %>
4
4
  <div class="flex flex-col gap-6 pb-4">
5
- <%= render component("ui/forms/field").text_field(f, :amount, class: "required") %>
6
- <%= render component("ui/forms/field").select(
7
- f,
5
+ <%= f.text_field(:amount, class: "required") %>
6
+ <%= f.select(
8
7
  :store_credit_reason_id,
9
- store_credit_reasons_select_options.html_safe,
10
- include_blank: t('spree.choose_reason'),
8
+ @store_credit_reasons.map { [_1.name, _1.id] },
9
+ include_blank: t('.choose_reason'),
11
10
  html: { required: true }
12
11
  ) %>
13
12
  </div>
@@ -15,7 +14,7 @@
15
14
  <form method="dialog">
16
15
  <%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
17
16
  </form>
18
- <%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
17
+ <%= f.submit %>
19
18
  <% end %>
20
19
  <% end %>
21
20
  <% end %>
@@ -14,9 +14,4 @@ class SolidusAdmin::Users::StoreCredits::EditAmount::Component < SolidusAdmin::R
14
14
  def form_url
15
15
  solidus_admin.update_amount_user_store_credit_path(@user, @store_credit, **search_filter_params)
16
16
  end
17
-
18
- def store_credit_reasons_select_options
19
- # Placeholder + Store Credit Reasons
20
- "<option value>#{t('.choose_reason')}</option>" + options_from_collection_for_select(@store_credit_reasons, :id, :name)
21
- end
22
17
  end
@@ -1,5 +1,4 @@
1
1
  en:
2
2
  title: Edit Store Credit Amount
3
3
  cancel: Cancel
4
- submit: Update Store Credit
5
4
  choose_reason: Choose Reason For Changing Amount
@@ -1,14 +1,14 @@
1
- <%= turbo_frame_tag :resource_modal, target: "_top" do %>
1
+ <%= turbo_frame_tag :resource_form, target: "_top" do %>
2
2
  <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
3
- <%= form_for @store_credit, url: form_url, method: :put, html: { id: form_id } do |f| %>
3
+ <%= solidus_form_for @store_credit, url: form_url, method: :put, html: { id: form_id } do |f| %>
4
4
  <div class="flex flex-col gap-6 pb-4">
5
- <%= render component("ui/forms/field").text_field(f, :memo) %>
5
+ <%= f.text_field(:memo) %>
6
6
  </div>
7
7
  <% modal.with_actions do %>
8
8
  <form method="dialog">
9
9
  <%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
10
10
  </form>
11
- <%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
11
+ <%= f.submit %>
12
12
  <% end %>
13
13
  <% end %>
14
14
  <% end %>
@@ -1,4 +1,3 @@
1
1
  en:
2
2
  title: Edit Store Credit Memo
3
3
  cancel: Cancel
4
- submit: Update Store Credit
@@ -1,12 +1,11 @@
1
- <%= turbo_frame_tag :resource_modal, target: "_top" do %>
1
+ <%= turbo_frame_tag :resource_form, target: "_top" do %>
2
2
  <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
3
- <%= form_for @store_credit, url: form_url, method: :put, html: { id: form_id } do |f| %>
3
+ <%= solidus_form_for @store_credit, url: form_url, method: :put, html: { id: form_id } do |f| %>
4
4
  <div class="flex flex-col gap-6 pb-4">
5
- <%= render component("ui/forms/field").select(
6
- f,
5
+ <%= f.select(
7
6
  :store_credit_reason_id,
8
- store_credit_reasons_select_options.html_safe,
9
- include_blank: t('spree.choose_reason'),
7
+ @store_credit_reasons.map { [_1.name, _1.id] },
8
+ include_blank: t('.choose_reason'),
10
9
  html: { required: true }
11
10
  ) %>
12
11
  </div>
@@ -14,7 +13,7 @@
14
13
  <form method="dialog">
15
14
  <%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
16
15
  </form>
17
- <%= render component("ui/button").new(form: form_id, scheme: :danger, type: :submit, text: t('.submit')) %>
16
+ <%= f.submit(text: t('.submit'), scheme: :danger) %>
18
17
  <% end %>
19
18
  <% end %>
20
19
  <% end %>
@@ -14,9 +14,4 @@ class SolidusAdmin::Users::StoreCredits::EditValidity::Component < SolidusAdmin:
14
14
  def form_url
15
15
  solidus_admin.invalidate_user_store_credit_path(@user, @store_credit, **search_filter_params)
16
16
  end
17
-
18
- def store_credit_reasons_select_options
19
- # Placeholder + Store Credit Reasons
20
- "<option value>#{t('.choose_reason')}</option>" + options_from_collection_for_select(@store_credit_reasons, :id, :name)
21
- end
22
17
  end
@@ -8,7 +8,7 @@
8
8
  tag: :a,
9
9
  href: new_store_credit_path,
10
10
  data: {
11
- turbo_frame: :resource_modal
11
+ turbo_frame: :resource_form
12
12
  },
13
13
  text: t(".add_store_credit"),
14
14
  icon: "add-line"
@@ -17,9 +17,7 @@
17
17
  <% end %>
18
18
 
19
19
  <%= page_header do %>
20
- <% tabs.each do |tab| %>
21
- <%= render(component("ui/button").new(tag: :a, scheme: :ghost, text: tab[:text], 'aria-current': tab[:current], href: tab[:href])) %>
22
- <% end %>
20
+ <%= render component("users/edit/tabs").new(user: @user, current: :store_credits) %>
23
21
  <% end %>
24
22
 
25
23
  <%= page_with_sidebar do %>
@@ -47,7 +45,7 @@
47
45
  <%= render component("ui/button").new(
48
46
  tag: :a,
49
47
  data: {
50
- turbo_frame: :resource_modal
48
+ turbo_frame: :resource_form
51
49
  },
52
50
  href: new_store_credit_path,
53
51
  text: t(".create_one"),
@@ -61,5 +59,5 @@
61
59
  <% end %>
62
60
  <% end %>
63
61
 
64
- <%= turbo_frame_tag :resource_modal, target: "_top" %>
62
+ <%= turbo_frame_tag :resource_form, target: "_top" %>
65
63
  <% end %>
@@ -12,36 +12,6 @@ class SolidusAdmin::Users::StoreCredits::Index::Component < SolidusAdmin::BaseCo
12
12
  Spree::StoreCredit
13
13
  end
14
14
 
15
- def tabs
16
- [
17
- {
18
- text: t('.account'),
19
- href: solidus_admin.user_path(@user),
20
- current: false,
21
- },
22
- {
23
- text: t('.addresses'),
24
- href: solidus_admin.addresses_user_path(@user),
25
- current: false,
26
- },
27
- {
28
- text: t('.order_history'),
29
- href: solidus_admin.orders_user_path(@user),
30
- current: false,
31
- },
32
- {
33
- text: t('.items'),
34
- href: spree.items_admin_user_path(@user),
35
- current: false,
36
- },
37
- {
38
- text: t('.store_credit'),
39
- href: solidus_admin.user_store_credits_path(@user),
40
- current: true,
41
- },
42
- ]
43
- end
44
-
45
15
  def rows
46
16
  @store_credits
47
17
  end
@@ -58,54 +28,54 @@ class SolidusAdmin::Users::StoreCredits::Index::Component < SolidusAdmin::BaseCo
58
28
  [
59
29
  {
60
30
  header: :credited,
61
- col: { class: "w-[12%]" },
31
+ col: {class: "w-[12%]"},
62
32
  data: ->(store_credit) do
63
33
  link_to store_credit.display_amount.to_html, show_path(store_credit), class: "body-link text-sm"
64
34
  end
65
35
  },
66
36
  {
67
37
  header: :authorized,
68
- col: { class: "w-[13%]" },
38
+ col: {class: "w-[13%]"},
69
39
  data: ->(store_credit) do
70
40
  link_to store_credit.display_amount_authorized.to_html, show_path(store_credit), class: "body-link text-sm"
71
41
  end
72
42
  },
73
43
  {
74
44
  header: :used,
75
- col: { class: "w-[9%]" },
45
+ col: {class: "w-[9%]"},
76
46
  data: ->(store_credit) do
77
47
  link_to store_credit.display_amount_used.to_html, show_path(store_credit), class: "body-link text-sm"
78
48
  end
79
49
  },
80
50
  {
81
51
  header: :type,
82
- col: { class: "w-[13%]" },
52
+ col: {class: "w-[13%]"},
83
53
  data: ->(store_credit) do
84
- component('ui/badge').new(name: store_credit.credit_type.name, color: :blue)
54
+ component("ui/badge").new(name: store_credit.credit_type.name, color: :blue)
85
55
  end
86
56
  },
87
57
  {
88
58
  header: :created_by,
89
- col: { class: "w-[22%]" },
59
+ col: {class: "w-[22%]"},
90
60
  data: ->(store_credit) do
91
61
  content_tag :div, store_credit.created_by_email, class: "text-sm"
92
62
  end
93
63
  },
94
64
  {
95
65
  header: :issued_on,
96
- col: { class: "w-[16%]" },
66
+ col: {class: "w-[16%]"},
97
67
  data: ->(store_credit) do
98
68
  content_tag :span, I18n.l(store_credit.created_at.to_date), class: "text-sm"
99
69
  end
100
70
  },
101
71
  {
102
72
  header: :invalidated,
103
- col: { class: "w-[15%]" },
73
+ col: {class: "w-[15%]"},
104
74
  data: ->(store_credit) do
105
75
  if store_credit.invalidated?
106
- component('ui/badge').new(name: :yes, color: :red, size: :m)
76
+ component("ui/badge").new(name: :yes, color: :red, size: :m)
107
77
  else
108
- component('ui/badge').new(name: :no, color: :green, size: :m)
78
+ component("ui/badge").new(name: :no, color: :green, size: :m)
109
79
  end
110
80
  end
111
81
  }
@@ -1,12 +1,6 @@
1
1
  en:
2
2
  title: "Users / %{email} / Store Credit"
3
- account: Account
4
- addresses: Addresses
5
- order_history: Order History
6
- items: Items
7
3
  store_credit: Store Credit
8
- last_active: Last Active
9
4
  add_store_credit: Add Store Credit
10
5
  no_credits_found: No Store Credits found.
11
6
  create_one: Create One
12
- back: Back
@@ -1,29 +1,28 @@
1
- <%= turbo_frame_tag :resource_modal, target: "_top" do %>
1
+ <%= turbo_frame_tag :resource_form, target: "_top" do %>
2
2
  <%= render component("ui/modal").new(title: t(".title")) do |modal| %>
3
- <%= form_for @store_credit, url: form_url, method: :post, html: { id: form_id } do |f| %>
3
+ <%= solidus_form_for @store_credit, url: form_url, method: :post, html: { id: form_id } do |f| %>
4
4
  <div class="flex flex-col gap-6 pb-4">
5
- <%= render component("ui/forms/field").text_field(f, :amount, class: "required") %>
6
- <%= render component("ui/forms/field").select(
7
- f,
5
+ <%= f.text_field(:amount, class: "required") %>
6
+ <%= f.select(
8
7
  :currency,
9
- currency_select_options.html_safe,
10
- include_blank: t("spree.currency"),
8
+ Spree::Config.available_currencies.map { [_1.iso_code, _1.iso_code] },
9
+ placeholder: t("spree.currency"),
10
+ value: Spree::Config.currency,
11
11
  html: { required: true }
12
12
  ) %>
13
- <%= render component("ui/forms/field").select(
14
- f,
13
+ <%= f.select(
15
14
  :category_id,
16
- store_credit_categories_select_options.html_safe,
17
- include_blank: t("spree.category"),
15
+ @store_credit_categories.map { [_1.name, _1.id] },
16
+ include_blank: t(".choose_category"),
18
17
  html: { required: true }
19
18
  ) %>
20
- <%= render component("ui/forms/field").text_field(f, :memo) %>
19
+ <%= f.text_field(:memo) %>
21
20
  </div>
22
21
  <% modal.with_actions do %>
23
22
  <form method="dialog">
24
23
  <%= render component("ui/button").new(scheme: :secondary, text: t(".cancel")) %>
25
24
  </form>
26
- <%= render component("ui/button").new(form: form_id, type: :submit, text: t(".submit")) %>
25
+ <%= f.submit %>
27
26
  <% end %>
28
27
  <% end %>
29
28
  <% end %>
@@ -10,13 +10,4 @@ class SolidusAdmin::Users::StoreCredits::New::Component < SolidusAdmin::Resource
10
10
  def form_url
11
11
  solidus_admin.user_store_credits_path(@user, **search_filter_params)
12
12
  end
13
-
14
- def currency_select_options
15
- options_from_collection_for_select(Spree::Config.available_currencies, :iso_code, :iso_code, Spree::Config.currency)
16
- end
17
-
18
- def store_credit_categories_select_options
19
- # Placeholder + Store Credit Categories
20
- "<option value>#{t('.choose_category')}</option>" + options_from_collection_for_select(@store_credit_categories, :id, :name)
21
- end
22
13
  end
@@ -1,5 +1,4 @@
1
1
  en:
2
2
  title: New Store Credit
3
3
  cancel: Cancel
4
- submit: Create
5
4
  choose_category: Choose Store Credit Category
@@ -5,9 +5,7 @@
5
5
  <% end %>
6
6
 
7
7
  <%= page_header do %>
8
- <% tabs.each do |tab| %>
9
- <%= render(component("ui/button").new(tag: :a, scheme: :ghost, text: tab[:text], 'aria-current': tab[:current], href: tab[:href])) %>
10
- <% end %>
8
+ <%= render component("users/edit/tabs").new(user: @user, current: :store_credits) %>
11
9
  <% end %>
12
10
 
13
11
  <%= page_with_sidebar do %>
@@ -31,7 +29,7 @@
31
29
  tag: :a,
32
30
  scheme: :danger,
33
31
  data: {
34
- turbo_frame: :resource_modal
32
+ turbo_frame: :resource_form
35
33
  },
36
34
  href: edit_validity_url,
37
35
  text: t(".invalidate"),
@@ -41,7 +39,7 @@
41
39
  <%= render component("ui/button").new(
42
40
  tag: :a,
43
41
  data: {
44
- turbo_frame: :resource_modal
42
+ turbo_frame: :resource_form
45
43
  },
46
44
  href: edit_memo_url,
47
45
  text: t(".edit_memo"),
@@ -51,7 +49,7 @@
51
49
  <%= render component("ui/button").new(
52
50
  tag: :a,
53
51
  data: {
54
- turbo_frame: :resource_modal
52
+ turbo_frame: :resource_form
55
53
  },
56
54
  href: edit_amount_url,
57
55
  text: t(".edit_amount"),
@@ -79,5 +77,5 @@
79
77
  <% end %>
80
78
  <% end %>
81
79
 
82
- <%= turbo_frame_tag :resource_modal, target: "_top" %>
80
+ <%= turbo_frame_tag :resource_form, target: "_top" %>
83
81
  <% end %>
@@ -18,36 +18,6 @@ class SolidusAdmin::Users::StoreCredits::Show::Component < SolidusAdmin::BaseCom
18
18
  Spree::StoreCreditEvent
19
19
  end
20
20
 
21
- def tabs
22
- [
23
- {
24
- text: t('.account'),
25
- href: solidus_admin.user_path(@user),
26
- current: false,
27
- },
28
- {
29
- text: t('.addresses'),
30
- href: solidus_admin.addresses_user_path(@user),
31
- current: false,
32
- },
33
- {
34
- text: t('.order_history'),
35
- href: solidus_admin.orders_user_path(@user),
36
- current: false,
37
- },
38
- {
39
- text: t('.items'),
40
- href: spree.items_admin_user_path(@user),
41
- current: false,
42
- },
43
- {
44
- text: t('.store_credit'),
45
- href: solidus_admin.user_store_credits_path(@user),
46
- current: true,
47
- },
48
- ]
49
- end
50
-
51
21
  def form_id
52
22
  @form_id ||= "#{stimulus_id}--form-#{@store_credit.id}"
53
23
  end
@@ -68,53 +38,53 @@ class SolidusAdmin::Users::StoreCredits::Show::Component < SolidusAdmin::BaseCom
68
38
  [
69
39
  {
70
40
  header: :date,
71
- col: { class: "w-[15%]" },
41
+ col: {class: "w-[15%]"},
72
42
  data: ->(event) do
73
43
  content_tag :span, I18n.l(event.created_at, format: :short), class: "text-sm"
74
44
  end
75
45
  },
76
46
  {
77
47
  header: :action,
78
- col: { class: "w-[10%]" },
48
+ col: {class: "w-[10%]"},
79
49
  data: ->(event) do
80
50
  content_tag :span, store_credit_event_admin_action_name(event), class: "text-sm"
81
51
  end
82
52
  },
83
53
  {
84
54
  header: :credited,
85
- col: { class: "w-[10%]" },
55
+ col: {class: "w-[10%]"},
86
56
  data: ->(event) do
87
57
  content_tag :span, event.display_amount, class: "text-sm"
88
58
  end
89
59
  },
90
60
  {
91
61
  header: :created_by,
92
- col: { class: "w-[20%]" },
62
+ col: {class: "w-[20%]"},
93
63
  data: ->(event) do
94
64
  content_tag :span, store_credit_event_originator_link(event), class: "body-link text-sm"
95
65
  end
96
66
  },
97
67
  {
98
68
  header: :total_amount,
99
- col: { class: "w-[10%]" },
69
+ col: {class: "w-[10%]"},
100
70
  data: ->(event) do
101
71
  content_tag :span, event.display_user_total_amount, class: "text-sm"
102
72
  end
103
73
  },
104
74
  {
105
75
  header: :total_unused,
106
- col: { class: "w-[10%]" },
76
+ col: {class: "w-[10%]"},
107
77
  data: ->(event) do
108
78
  content_tag :span, event.display_remaining_amount, class: "text-sm"
109
79
  end
110
80
  },
111
81
  {
112
82
  header: :reason_for_updating,
113
- col: { class: "w-[25%]" },
83
+ col: {class: "w-[25%]"},
114
84
  data: ->(event) do
115
85
  content_tag :span, event.store_credit_reason&.name, class: "text-sm"
116
86
  end
117
- },
87
+ }
118
88
  ]
119
89
  end
120
90
  end
@@ -1,11 +1,6 @@
1
1
  en:
2
2
  title: "Users / %{email} / Store Credit / %{amount}"
3
- account: Account
4
- addresses: Addresses
5
- order_history: Order History
6
- items: Items
7
3
  store_credit: Store Credit
8
- last_active: Last Active
9
4
  add_store_credit: Add Store Credit
10
5
  edit_amount: Edit Amount
11
6
  edit_memo: Edit Memo
@@ -15,4 +10,3 @@ en:
15
10
  created_by: Created By
16
11
  type: Type
17
12
  memo: Memo
18
- back: Back
@@ -3,7 +3,7 @@
3
3
  class SolidusAdmin::UsersAndRoles::Component < SolidusAdmin::UI::Pages::Index::Component
4
4
  def title
5
5
  page_header_title safe_join([
6
- tag.div(t(".title")),
6
+ tag.div(t(".title"))
7
7
  ])
8
8
  end
9
9
 
@@ -12,13 +12,13 @@ class SolidusAdmin::UsersAndRoles::Component < SolidusAdmin::UI::Pages::Index::C
12
12
  {
13
13
  text: Spree.user_class.model_name.human(count: 2),
14
14
  href: solidus_admin.users_path,
15
- current: model_class == Spree.user_class,
15
+ current: model_class == Spree.user_class
16
16
  },
17
17
  {
18
18
  text: Spree::Role.model_name.human(count: 2),
19
19
  href: solidus_admin.roles_path,
20
- current: model_class == Spree::Role,
21
- },
20
+ current: model_class == Spree::Role
21
+ }
22
22
  ]
23
23
  end
24
24
  end
@@ -0,0 +1 @@
1
+ <%= render component("zones/form").new(zone: @zone, form_url:, form_id:) %>
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::Zones::Edit::Component < SolidusAdmin::Resources::Edit::Component
4
+ end
@@ -0,0 +1,47 @@
1
+ <%= turbo_frame_tag :resource_form, target: "_top" do %>
2
+ <%= render component("ui/modal").new(title:) do |modal| %>
3
+ <%= solidus_form_for @zone, url: @form_url, html: { id: @form_id, **stimulus_controller, **stimulus_value(name: :kind, value: @zone.kind) } do |f| %>
4
+ <div class="flex flex-col gap-6 pb-4">
5
+ <%= f.text_field(:name, class: "required") %>
6
+
7
+ <%= tag.div(class: "hidden", **stimulus_target("countriesWrapper")) do %>
8
+ <%= f.select(
9
+ :country_ids,
10
+ country_select_options,
11
+ multiple: true,
12
+ class: "required",
13
+ **stimulus_target("countriesSelect")
14
+ ) %>
15
+ <% end %>
16
+
17
+ <%= tag.div(class: "hidden", **stimulus_target("statesWrapper")) do %>
18
+ <%= f.select(
19
+ :state_ids,
20
+ selected_state_select_options,
21
+ multiple: true,
22
+ class: "required",
23
+ src: solidus_admin.states_url(view: :state_with_country),
24
+ "data-query-param": "q[name_or_country_name_cont]",
25
+ **stimulus_target("statesSelect")
26
+ ) %>
27
+ <% end %>
28
+
29
+ <%= f.text_field(:description, class: "required") %>
30
+
31
+ <%= f.select(
32
+ :kind,
33
+ [[t(".kinds.country"), :country], [t(".kinds.state"), :state]],
34
+ value: @zone.kind || default_zone_kind,
35
+ **stimulus_action("toggleKind", on: "change")
36
+ ) %>
37
+ </div>
38
+
39
+ <% modal.with_actions do %>
40
+ <form method="dialog">
41
+ <%= render component("ui/button").cancel %>
42
+ </form>
43
+ <%= render component("ui/button").submit(resource: @zone, form: @form_id) %>
44
+ <% end %>
45
+ <% end %>
46
+ <% end %>
47
+ <% end %>
@@ -0,0 +1,32 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+
3
+ export default class extends Controller {
4
+ static targets = ["countriesWrapper", "statesWrapper", "countriesSelect", "statesSelect"]
5
+ static values = {
6
+ kind: { type: String, default: "state" }
7
+ }
8
+
9
+ connect() {
10
+ this.toggleSelectsVisibility();
11
+ this.toggleSelectDisabled();
12
+ }
13
+
14
+ toggleKind(event) {
15
+ if (!event.target.value) return;
16
+
17
+ this.kindValue = event.target.value;
18
+
19
+ this.toggleSelectsVisibility();
20
+ this.toggleSelectDisabled();
21
+ }
22
+
23
+ toggleSelectsVisibility() {
24
+ this.countriesWrapperTarget.classList.toggle("hidden", this.kindValue === "state");
25
+ this.statesWrapperTarget.classList.toggle("hidden", this.kindValue === "country");
26
+ }
27
+
28
+ toggleSelectDisabled() {
29
+ this.countriesSelectTarget.disabled = this.kindValue === "state";
30
+ this.statesSelectTarget.disabled = this.kindValue === "country";
31
+ }
32
+ }
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::Zones::Form::Component < SolidusAdmin::BaseComponent
4
+ def initialize(zone:, form_url:, form_id:)
5
+ @zone = zone
6
+ @form_url = form_url
7
+ @form_id = form_id
8
+ end
9
+
10
+ def title
11
+ @zone.new_record? ? t(".title.new") : t(".title.edit")
12
+ end
13
+
14
+ def country_select_options
15
+ Spree::Country.order(:name).map { |c| [c.name, c.id] }
16
+ end
17
+
18
+ def default_zone_kind = :state
19
+
20
+ def selected_state_select_options
21
+ Spree::State.where(id: @zone.state_ids).map { |s| [s.state_with_country, s.id] }
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ en:
2
+ kinds:
3
+ country: "Country based"
4
+ state: "State based"
5
+ title:
6
+ edit: "Edit Zone"
7
+ new: "New Zone"