solidus_admin 0.4.0 → 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 +722 -45
  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 +18 -51
  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 +173 -29
  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
@@ -5,20 +5,16 @@ class SolidusAdmin::StockLocations::Index::Component < SolidusAdmin::Shipping::C
5
5
  Spree::StockLocation
6
6
  end
7
7
 
8
- def actions
8
+ def page_actions
9
9
  render component("ui/button").new(
10
10
  tag: :a,
11
- text: t('.add'),
12
- href: spree.new_admin_stock_location_path,
11
+ text: t(".add"),
12
+ href: solidus_admin.new_stock_location_path,
13
13
  icon: "add-line",
14
- class: "align-self-end w-full",
14
+ class: "align-self-end w-full"
15
15
  )
16
16
  end
17
17
 
18
- def row_url(stock_location)
19
- spree.edit_admin_stock_location_path(stock_location)
20
- end
21
-
22
18
  def search_url
23
19
  solidus_admin.stock_locations_path
24
20
  end
@@ -27,14 +23,18 @@ class SolidusAdmin::StockLocations::Index::Component < SolidusAdmin::Shipping::C
27
23
  :name_or_description_cont
28
24
  end
29
25
 
26
+ def edit_path(stock_location)
27
+ solidus_admin.edit_stock_location_path(stock_location)
28
+ end
29
+
30
30
  def batch_actions
31
31
  [
32
32
  {
33
- label: t('.batch_actions.delete'),
33
+ label: t(".batch_actions.delete"),
34
34
  action: solidus_admin.stock_locations_path,
35
35
  method: :delete,
36
- icon: 'delete-bin-7-line',
37
- },
36
+ icon: "delete-bin-7-line"
37
+ }
38
38
  ]
39
39
  end
40
40
 
@@ -48,42 +48,89 @@ class SolidusAdmin::StockLocations::Index::Component < SolidusAdmin::Shipping::C
48
48
 
49
49
  def columns
50
50
  [
51
- :name,
52
- :code,
53
- :admin_name,
54
- {
55
- header: :state,
56
- data: -> {
57
- color = _1.active? ? :green : :graphite_light
58
- text = _1.active? ? t('.active') : t('.inactive')
59
-
60
- component('ui/badge').new(name: text, color:)
61
- },
62
- },
63
- {
64
- header: :backorderable,
65
- data: -> {
66
- _1.backorderable_default ? component('ui/badge').yes : component('ui/badge').no
67
- }
68
- },
69
- {
70
- header: :default,
71
- data: -> {
72
- _1.default ? component('ui/badge').yes : component('ui/badge').no
73
- }
74
- },
75
- {
76
- header: :stock_movements,
77
- data: -> {
78
- count = _1.stock_movements.count
79
-
80
- link_to(
81
- "#{count} #{Spree::StockMovement.model_name.human(count:).downcase}",
82
- spree.admin_stock_location_stock_movements_path(_1),
83
- class: 'body-link'
84
- )
85
- }
86
- }
51
+ name_column,
52
+ code_column,
53
+ admin_name_column,
54
+ state_column,
55
+ backorderable_column,
56
+ default_column,
57
+ stock_movements_column
87
58
  ]
88
59
  end
60
+
61
+ private
62
+
63
+ def name_column
64
+ {
65
+ header: :name,
66
+ data: ->(stock_location) do
67
+ link_to stock_location.name, edit_path(stock_location), class: "body-link"
68
+ end
69
+ }
70
+ end
71
+
72
+ def code_column
73
+ {
74
+ header: :code,
75
+ data: ->(stock_location) do
76
+ return if stock_location.code.blank?
77
+ link_to stock_location.code, edit_path(stock_location), class: "body-link"
78
+ end
79
+ }
80
+ end
81
+
82
+ def admin_name_column
83
+ {
84
+ header: :admin_name,
85
+ data: ->(stock_location) do
86
+ return if stock_location.admin_name.blank?
87
+ link_to stock_location.admin_name, edit_path(stock_location), class: "body-link"
88
+ end
89
+ }
90
+ end
91
+
92
+ def state_column
93
+ {
94
+ header: :state,
95
+ data: ->(stock_location) do
96
+ color = stock_location.active? ? :green : :graphite_light
97
+ text = stock_location.active? ? t(".active") : t(".inactive")
98
+
99
+ component("ui/badge").new(name: text, color:)
100
+ end
101
+ }
102
+ end
103
+
104
+ def backorderable_column
105
+ {
106
+ header: :backorderable,
107
+ data: -> do
108
+ _1.backorderable_default ? component("ui/badge").yes : component("ui/badge").no
109
+ end
110
+ }
111
+ end
112
+
113
+ def default_column
114
+ {
115
+ header: :default,
116
+ data: -> do
117
+ _1.default ? component("ui/badge").yes : component("ui/badge").no
118
+ end
119
+ }
120
+ end
121
+
122
+ def stock_movements_column
123
+ {
124
+ header: :stock_movements,
125
+ data: ->(stock_location) do
126
+ count = stock_location.stock_movements.count
127
+
128
+ link_to(
129
+ "#{count} #{Spree::StockMovement.model_name.human(count:).downcase}",
130
+ spree.admin_stock_location_stock_movements_path(stock_location),
131
+ class: "body-link"
132
+ )
133
+ end
134
+ }
135
+ end
89
136
  end
@@ -0,0 +1,16 @@
1
+ <%= page id: :resource_form do %>
2
+ <%= page_header do %>
3
+ <%= page_header_back(back_url) %>
4
+ <%= page_header_title(t('.title')) %>
5
+ <%= page_header_actions do %>
6
+ <%= render component("ui/button").discard(path: back_url) %>
7
+ <%= render component("ui/button").save(form: form_id) %>
8
+ <% end %>
9
+ <% end %>
10
+
11
+ <%= render component("stock_locations/form").new(stock_location: @stock_location, url: form_url, id: form_id) %>
12
+
13
+ <%= page_footer do %>
14
+ <%= render component("ui/button").save(form: form_id) %>
15
+ <% end %>
16
+ <% end %>
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::StockLocations::New::Component < SolidusAdmin::Resources::New::Component
4
+ include SolidusAdmin::Layout::PageHelpers
5
+
6
+ def initialize(*args)
7
+ super
8
+ ensure_country
9
+ end
10
+
11
+ private
12
+
13
+ def ensure_country
14
+ @stock_location.country.blank? && (@stock_location.country = Spree::Country.default)
15
+ end
16
+ end
@@ -0,0 +1,2 @@
1
+ en:
2
+ title: "New Stock Location"
@@ -1,24 +1,15 @@
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_reason, url: form_url, html: { id: form_id } do |f| %>
3
+ <%= solidus_form_for @store_credit_reason, url: form_url, 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, :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>
5
+ <%= f.text_field(:name, class: "required") %>
6
+ <%= f.checkbox(:active, hint: t(".hints.active")) %>
16
7
  </div>
17
8
  <% modal.with_actions do %>
18
9
  <form method="dialog">
19
10
  <%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
20
11
  </form>
21
- <%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
12
+ <%= f.submit %>
22
13
  <% end %>
23
14
  <% end %>
24
15
  <% end %>
@@ -3,6 +3,5 @@
3
3
  en:
4
4
  title: "Edit Store Credit Reason"
5
5
  cancel: "Cancel"
6
- submit: "Update Store Credit Reason"
7
6
  hints:
8
7
  active: "When checked, this store credit reason will be available for selection when adding store credit to orders."
@@ -8,17 +8,17 @@ class SolidusAdmin::StoreCreditReasons::Index::Component < SolidusAdmin::Refunds
8
8
  def page_actions
9
9
  render component("ui/button").new(
10
10
  tag: :a,
11
- text: t('.add'),
11
+ text: t(".add"),
12
12
  href: solidus_admin.new_store_credit_reason_path(**search_filter_params),
13
- data: { turbo_frame: :resource_modal },
13
+ data: {turbo_frame: :resource_form},
14
14
  icon: "add-line",
15
- class: "align-self-end w-full",
15
+ class: "align-self-end w-full"
16
16
  )
17
17
  end
18
18
 
19
19
  def turbo_frames
20
20
  %w[
21
- resource_modal
21
+ resource_form
22
22
  ]
23
23
  end
24
24
 
@@ -37,11 +37,11 @@ class SolidusAdmin::StoreCreditReasons::Index::Component < SolidusAdmin::Refunds
37
37
  def batch_actions
38
38
  [
39
39
  {
40
- label: t('.batch_actions.delete'),
40
+ label: t(".batch_actions.delete"),
41
41
  action: solidus_admin.store_credit_reasons_path(**search_filter_params),
42
42
  method: :delete,
43
- icon: 'delete-bin-7-line',
44
- },
43
+ icon: "delete-bin-7-line"
44
+ }
45
45
  ]
46
46
  end
47
47
 
@@ -51,16 +51,16 @@ class SolidusAdmin::StoreCreditReasons::Index::Component < SolidusAdmin::Refunds
51
51
  header: :name,
52
52
  data: ->(store_credit_reason) do
53
53
  link_to store_credit_reason.name, edit_path(store_credit_reason),
54
- data: { turbo_frame: :resource_modal },
55
- class: 'body-link'
54
+ data: {turbo_frame: :resource_form},
55
+ class: "body-link"
56
56
  end
57
57
  },
58
58
  {
59
59
  header: :active,
60
60
  data: ->(store_credit_reason) do
61
- store_credit_reason.active? ? component('ui/badge').yes : component('ui/badge').no
61
+ store_credit_reason.active? ? component("ui/badge").yes : component("ui/badge").no
62
62
  end
63
- },
63
+ }
64
64
  ]
65
65
  end
66
66
  end
@@ -1,24 +1,15 @@
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_reason, url: form_url, html: { id: form_id } do |f| %>
3
+ <%= solidus_form_for @store_credit_reason, url: form_url, 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, :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>
5
+ <%= f.text_field(:name, class: "required") %>
6
+ <%= f.checkbox(:active, hint: t(".hints.active")) %>
16
7
  </div>
17
8
  <% modal.with_actions do %>
18
9
  <form method="dialog">
19
10
  <%= render component("ui/button").new(scheme: :secondary, text: t('.cancel')) %>
20
11
  </form>
21
- <%= render component("ui/button").new(form: form_id, type: :submit, text: t('.submit')) %>
12
+ <%= f.submit %>
22
13
  <% end %>
23
14
  <% end %>
24
15
  <% end %>
@@ -3,6 +3,5 @@
3
3
  en:
4
4
  title: "New Store Credit Reason"
5
5
  cancel: "Cancel"
6
- submit: "Add Store Credit Reason"
7
6
  hints:
8
7
  active: "When checked, this store credit reason will be available for selection when adding store credit to orders."
@@ -0,0 +1,27 @@
1
+ <%= page id: :resource_form do %>
2
+ <%= page_header do %>
3
+ <%= page_header_back(back_url) %>
4
+ <%= page_header_title(@store.name) %>
5
+ <%= page_header_actions do %>
6
+ <%= render component("ui/button").discard(path: back_url) %>
7
+ <%= render component("ui/button").save(form: form_id) %>
8
+ <% end %>
9
+ <% end %>
10
+
11
+ <%= render component("stores/form").new(store: @store, url: form_url, id: form_id) %>
12
+
13
+ <%= page_footer do %>
14
+ <div class="flex justify-between w-full">
15
+ <% unless @store.default %>
16
+ <%= form_for @store, url: solidus_admin.store_path(@store), method: :delete do %>
17
+ <%= render component("ui/button").delete(
18
+ "data-controller": "confirm",
19
+ "data-confirm-text-value": t("spree.are_you_sure")
20
+ ) %>
21
+ <% end %>
22
+ <% end %>
23
+
24
+ <%= render component("ui/button").save(form: form_id) %>
25
+ </div>
26
+ <% end %>
27
+ <% end %>
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::Stores::Edit::Component < SolidusAdmin::Resources::Edit::Component
4
+ include SolidusAdmin::Layout::PageHelpers
5
+ end
@@ -0,0 +1,102 @@
1
+ <%= form_for @store, url: @url, html: { id: @id } do |f| %>
2
+ <%= page_with_sidebar do %>
3
+ <%= page_with_sidebar_main do %>
4
+ <%= render component('ui/panel').new do |panel| %>
5
+ <% panel.with_section(class: "flex flex-col gap-4") do %>
6
+ <div class="flex flex-col gap-4 w-full">
7
+ <%= render component("ui/forms/field").text_field(f, :name) %>
8
+ <%= render component("ui/forms/field").text_field(f, :code) %>
9
+ <%= render component("ui/forms/field").text_field(f, :url) %>
10
+ <%= render component("ui/forms/field").text_field(f, :mail_from_address) %>
11
+ </div>
12
+ <% end %>
13
+ <% end %>
14
+ <%# This check can be removed once we drop support for Solidus 4.7 and earlier. %>
15
+ <% if Spree::Store.reflect_on_association(:address) %>
16
+ <%= render component('ui/panel').new(title: t('.address')) do |panel| %>
17
+ <% panel.with_section do %>
18
+ <%= render component('ui/forms/address').new(
19
+ addressable: address,
20
+ form_field_name: "store[address_attributes]",
21
+ excludes: address_excludes
22
+ ) %>
23
+ <% end %>
24
+ <% end %>
25
+ <% end %>
26
+ <%= render component('ui/panel').new(title: t('.localization')) do |panel| %>
27
+ <% panel.with_section(class: "flex flex-col gap-4") do %>
28
+ <div class="flex flex-col gap-4 w-full">
29
+ <%= render component("ui/forms/field").select(f, :default_currency, Spree::Config.available_currencies.map(&:iso_code)) %>
30
+ <%= render component("ui/forms/field").select(f, :cart_tax_country_iso, Spree::Country.order(:name).map { |c| [c.name, c.iso] },
31
+ include_blank: t(".tax_country.no_taxes_without_address")
32
+ ) %>
33
+ <%= render component("ui/forms/field").select(f, :available_locales, available_locales, multiple: true) %>
34
+ </div>
35
+ <%= render component('ui/panel').new do |inner_panel| %>
36
+ <% inner_panel.with_section(class: "flex justify-between") do %>
37
+ <div class="flex gap-2 items-center">
38
+ <div class="p-1 border border-gray-100 rounded-sm">
39
+ <%= render component("ui/icon").new(name: "github-fill", class: "w-9 h-9 fill-gray-500") %>
40
+ </div>
41
+ <div class="flex flex-col">
42
+ <div class="flex gap-1">
43
+ <div class="font-semibold"><%= t(".plugins.solidus_i18n.title") %></div>
44
+ <%= render component("ui/badge").new(name: t(".plugins.plugin"), color: :blue, size: :s) %>
45
+ </div>
46
+ <div class="text-sm text-gray-500"><%= t(".plugins.solidus_i18n.desc") %></div>
47
+ </div>
48
+ </div>
49
+ <div class="flex items-center">
50
+ <%= render component("ui/button").new(
51
+ tag: :a,
52
+ text: t(".plugins.install"),
53
+ scheme: :secondary,
54
+ href: t(".plugins.solidus_i18n.href"),
55
+ target: "_blank"
56
+ ) %>
57
+ </div>
58
+ <% end %>
59
+ <% end %>
60
+
61
+ <%= render component('ui/panel').new do |inner_panel| %>
62
+ <% inner_panel.with_section(class: "flex justify-between") do %>
63
+ <div class="flex gap-2 items-center">
64
+ <div class="p-1 border border-gray-100 rounded-sm">
65
+ <%= render component("ui/icon").new(name: "github-fill", class: "w-9 h-9 fill-gray-500") %>
66
+ </div>
67
+ <div class="flex flex-col">
68
+ <div class="flex gap-1">
69
+ <div class="font-semibold"><%= t(".plugins.solidus_globalize.title") %></div>
70
+ <%= render component("ui/badge").new(name: t(".plugins.plugin"), color: :blue, size: :s) %>
71
+ </div>
72
+ <div class="text-sm text-gray-500"><%= t(".plugins.solidus_globalize.desc") %></div>
73
+ </div>
74
+ </div>
75
+ <div class="flex items-center">
76
+ <%= render component("ui/button").new(
77
+ tag: :a,
78
+ text: t(".plugins.install"),
79
+ scheme: :secondary,
80
+ href: t(".plugins.solidus_globalize.href"),
81
+ target: "_blank"
82
+ ) %>
83
+ </div>
84
+ <% end %>
85
+ <% end %>
86
+ <% end %>
87
+ <% end %>
88
+ <% end %>
89
+
90
+ <%= page_with_sidebar_aside do %>
91
+ <%= render component('ui/panel').new(title: t('.seo')) do |panel| %>
92
+ <% panel.with_section(class: "flex flex-col gap-4") do %>
93
+ <div class="flex flex-col gap-4 w-full">
94
+ <%= render component("ui/forms/field").text_field(f, :seo_title) %>
95
+ <%= render component("ui/forms/field").text_field(f, :meta_keywords) %>
96
+ <%= render component("ui/forms/field").text_field(f, :meta_description) %>
97
+ </div>
98
+ <% end %>
99
+ <% end %>
100
+ <% end %>
101
+ <% end %>
102
+ <% end %>
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::Stores::Form::Component < SolidusAdmin::BaseComponent
4
+ include SolidusAdmin::Layout::PageHelpers
5
+
6
+ def initialize(store:, id:, url:)
7
+ @store = store
8
+ @id = id
9
+ @url = url
10
+ end
11
+
12
+ def address
13
+ @store.address || Spree::Address.new(country: Spree::Country.find_by(iso: Spree::Config.default_country_iso))
14
+ end
15
+
16
+ def address_excludes
17
+ excludes = [:email, :street_contd]
18
+ excludes << :phone unless Spree::Config.address_requires_phone
19
+ excludes
20
+ end
21
+
22
+ def available_locales
23
+ Spree.i18n_available_locales.map do |locale|
24
+ [I18n.t("spree.i18n.this_file_language", locale: locale, default: locale.to_s, fallback: false), locale]
25
+ end.sort
26
+ end
27
+ end
@@ -0,0 +1,17 @@
1
+ en:
2
+ address: Address
3
+ localization: Localization
4
+ plugins:
5
+ install: Install
6
+ plugin: Plugin
7
+ solidus_i18n:
8
+ href: https://github.com/solidusio/solidus_i18n
9
+ desc: Translate Solidus Admin in every language
10
+ title: Solidus i18n
11
+ solidus_globalize:
12
+ href: https://github.com/solidusio-contrib/solidus_globalize
13
+ desc: Translate your store content in every language
14
+ title: Solidus Globalize
15
+ seo: SEO
16
+ tax_country:
17
+ no_taxes_without_address: No taxes on carts without address
@@ -13,46 +13,75 @@ class SolidusAdmin::Stores::Index::Component < SolidusAdmin::UI::Pages::Index::C
13
13
  solidus_admin.stores_path
14
14
  end
15
15
 
16
- def row_url(store)
17
- spree.edit_admin_store_path(store)
16
+ def edit_path(store)
17
+ solidus_admin.edit_store_path(store)
18
18
  end
19
19
 
20
20
  def page_actions
21
21
  render component("ui/button").new(
22
22
  tag: :a,
23
- text: t('.add'),
24
- href: spree.new_admin_store_path,
25
- icon: "add-line",
23
+ text: t(".add"),
24
+ href: solidus_admin.new_store_path,
25
+ icon: "add-line"
26
26
  )
27
27
  end
28
28
 
29
29
  def batch_actions
30
30
  [
31
31
  {
32
- label: t('.batch_actions.delete'),
32
+ label: t(".batch_actions.delete"),
33
33
  action: solidus_admin.stores_path,
34
34
  method: :delete,
35
- icon: 'delete-bin-7-line',
36
- },
35
+ icon: "delete-bin-7-line",
36
+ require_confirmation: true
37
+ }
37
38
  ]
38
39
  end
39
40
 
40
41
  def columns
41
42
  [
42
- :name,
43
- :url,
44
- {
45
- header: :slug,
46
- data: ->(store) do
47
- content_tag :div, store.code
48
- end
49
- },
50
- {
51
- header: :default,
52
- data: ->(store) do
53
- store.default? ? component('ui/badge').yes : component('ui/badge').no
54
- end
55
- },
43
+ name_column,
44
+ url_column,
45
+ slug_column,
46
+ default_column
56
47
  ]
57
48
  end
49
+
50
+ private
51
+
52
+ def name_column
53
+ {
54
+ header: :name,
55
+ data: ->(store) do
56
+ link_to store.name, edit_path(store), class: "body-link"
57
+ end
58
+ }
59
+ end
60
+
61
+ def url_column
62
+ {
63
+ header: :url,
64
+ data: ->(store) do
65
+ link_to store.url, edit_path(store), class: "body-link"
66
+ end
67
+ }
68
+ end
69
+
70
+ def slug_column
71
+ {
72
+ header: :slug,
73
+ data: ->(store) do
74
+ link_to store.code, edit_path(store), class: "body-link"
75
+ end
76
+ }
77
+ end
78
+
79
+ def default_column
80
+ {
81
+ header: :default,
82
+ data: ->(store) do
83
+ store.default? ? component("ui/badge").yes : component("ui/badge").no
84
+ end
85
+ }
86
+ end
58
87
  end
@@ -0,0 +1,16 @@
1
+ <%= page id: :resource_form do %>
2
+ <%= page_header do %>
3
+ <%= page_header_back(back_url) %>
4
+ <%= page_header_title(t('.title')) %>
5
+ <%= page_header_actions do %>
6
+ <%= render component("ui/button").discard(path: back_url) %>
7
+ <%= render component("ui/button").save(form: form_id) %>
8
+ <% end %>
9
+ <% end %>
10
+
11
+ <%= render component("stores/form").new(store: @store, url: form_url, id: form_id) %>
12
+
13
+ <%= page_footer do %>
14
+ <%= render component("ui/button").save(form: form_id) %>
15
+ <% end %>
16
+ <% end %>
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SolidusAdmin::Stores::New::Component < SolidusAdmin::Resources::New::Component
4
+ include SolidusAdmin::Layout::PageHelpers
5
+ end
@@ -0,0 +1,2 @@
1
+ en:
2
+ title: "New Store"