solidus_admin 0.0.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (251) hide show
  1. checksums.yaml +4 -4
  2. data/.eslintrc.json +7 -0
  3. data/README.md +2 -2
  4. data/Rakefile +26 -0
  5. data/app/assets/builds/.keep +0 -0
  6. data/app/assets/builds/solidus_admin/tailwind.css +2799 -0
  7. data/app/assets/config/solidus_admin_manifest.js +1 -0
  8. data/app/assets/stylesheets/solidus_admin/application.tailwind.css +4 -0
  9. data/app/assets/stylesheets/solidus_admin/dark.css +12 -0
  10. data/app/assets/stylesheets/solidus_admin/dimmed.css +11 -0
  11. data/app/components/solidus_admin/adjustment_reasons/index/component.rb +43 -0
  12. data/app/components/solidus_admin/base_component.rb +29 -1
  13. data/app/components/solidus_admin/layout/feedback/component.html.erb +15 -0
  14. data/app/components/solidus_admin/layout/feedback/component.rb +4 -0
  15. data/app/components/solidus_admin/layout/feedback/component.yml +3 -0
  16. data/app/components/solidus_admin/layout/navigation/account/component.html.erb +74 -0
  17. data/app/components/solidus_admin/layout/navigation/account/component.js +16 -0
  18. data/app/components/solidus_admin/layout/navigation/account/component.rb +36 -0
  19. data/app/components/solidus_admin/{sidebar → layout/navigation}/component.html.erb +9 -9
  20. data/app/components/solidus_admin/layout/navigation/component.rb +26 -0
  21. data/app/components/solidus_admin/{sidebar → layout/navigation}/item/component.html.erb +5 -5
  22. data/app/components/solidus_admin/{sidebar → layout/navigation}/item/component.rb +2 -2
  23. data/app/components/solidus_admin/layout/page_helpers.rb +55 -0
  24. data/app/components/solidus_admin/{skip_link → layout/skip_link}/component.rb +2 -4
  25. data/app/components/solidus_admin/option_types/index/component.rb +71 -0
  26. data/app/components/solidus_admin/orders/cart/component.html.erb +77 -0
  27. data/app/components/solidus_admin/orders/cart/component.js +37 -0
  28. data/app/components/solidus_admin/orders/cart/component.rb +7 -0
  29. data/app/components/solidus_admin/orders/cart/component.yml +3 -0
  30. data/app/components/solidus_admin/orders/cart/result/component.html.erb +26 -0
  31. data/app/components/solidus_admin/orders/cart/result/component.rb +11 -0
  32. data/app/components/solidus_admin/orders/index/component.rb +92 -23
  33. data/app/components/solidus_admin/orders/index/component.yml +10 -4
  34. data/app/components/solidus_admin/orders/show/address/component.html.erb +67 -0
  35. data/app/components/solidus_admin/orders/show/address/component.js +9 -0
  36. data/app/components/solidus_admin/orders/show/address/component.rb +53 -0
  37. data/app/components/solidus_admin/orders/show/address/component.yml +14 -0
  38. data/app/components/solidus_admin/orders/show/component.html.erb +76 -0
  39. data/app/components/solidus_admin/orders/show/component.js +7 -0
  40. data/app/components/solidus_admin/orders/show/component.rb +40 -0
  41. data/app/components/solidus_admin/orders/show/component.yml +21 -0
  42. data/app/components/solidus_admin/orders/show/customer_search/component.html.erb +14 -0
  43. data/app/components/solidus_admin/orders/show/customer_search/component.js +14 -0
  44. data/app/components/solidus_admin/orders/show/customer_search/component.rb +7 -0
  45. data/app/components/solidus_admin/orders/show/customer_search/component.yml +2 -0
  46. data/app/components/solidus_admin/orders/show/customer_search/result/component.html.erb +17 -0
  47. data/app/components/solidus_admin/orders/show/customer_search/result/component.rb +11 -0
  48. data/app/components/solidus_admin/orders/show/email/component.html.erb +18 -0
  49. data/app/components/solidus_admin/orders/show/email/component.rb +15 -0
  50. data/app/components/solidus_admin/orders/show/email/component.yml +8 -0
  51. data/app/components/solidus_admin/orders/show/summary/component.html.erb +14 -0
  52. data/app/components/solidus_admin/orders/show/summary/component.rb +7 -0
  53. data/app/components/solidus_admin/orders/show/summary/component.yml +8 -0
  54. data/app/components/solidus_admin/payment_methods/index/component.rb +103 -0
  55. data/app/components/solidus_admin/payment_methods/index/component.yml +10 -0
  56. data/app/components/solidus_admin/products/index/component.rb +48 -41
  57. data/app/components/solidus_admin/products/index/component.yml +8 -7
  58. data/app/components/solidus_admin/products/show/component.html.erb +32 -38
  59. data/app/components/solidus_admin/products/show/component.rb +2 -0
  60. data/app/components/solidus_admin/products/show/component.yml +5 -5
  61. data/app/components/solidus_admin/products/status/component.rb +20 -18
  62. data/app/components/solidus_admin/products/status/component.yml +1 -0
  63. data/app/components/solidus_admin/products/stock/component.rb +38 -0
  64. data/app/components/solidus_admin/products/stock/component.yml +5 -0
  65. data/app/components/solidus_admin/promotion_categories/index/component.rb +56 -0
  66. data/app/components/solidus_admin/promotions/index/component.rb +104 -0
  67. data/app/components/solidus_admin/promotions/index/component.yml +10 -0
  68. data/app/components/solidus_admin/properties/index/component.rb +64 -0
  69. data/app/components/solidus_admin/refund_reasons/index/component.rb +53 -0
  70. data/app/components/solidus_admin/refunds_and_returns/component.rb +40 -0
  71. data/app/components/solidus_admin/refunds_and_returns/component.yml +3 -0
  72. data/app/components/solidus_admin/reimbursement_types/index/component.rb +27 -0
  73. data/app/components/solidus_admin/return_reasons/index/component.rb +42 -0
  74. data/app/components/solidus_admin/shipping/component.rb +30 -0
  75. data/app/components/solidus_admin/shipping/component.yml +3 -0
  76. data/app/components/solidus_admin/shipping_categories/index/component.rb +46 -0
  77. data/app/components/solidus_admin/shipping_methods/index/component.rb +61 -0
  78. data/app/components/solidus_admin/stock_items/edit/component.html.erb +89 -0
  79. data/app/components/solidus_admin/stock_items/edit/component.js +17 -0
  80. data/app/components/solidus_admin/stock_items/edit/component.rb +23 -0
  81. data/app/components/solidus_admin/stock_items/edit/component.yml +10 -0
  82. data/app/components/solidus_admin/stock_items/index/component.rb +174 -0
  83. data/app/components/solidus_admin/stock_items/index/component.yml +10 -0
  84. data/app/components/solidus_admin/stock_locations/index/component.rb +89 -0
  85. data/app/components/solidus_admin/stock_locations/index/component.yml +3 -0
  86. data/app/components/solidus_admin/store_credit_reasons/index/component.rb +52 -0
  87. data/app/components/solidus_admin/stores/index/component.rb +58 -0
  88. data/app/components/solidus_admin/tax_categories/index/component.rb +58 -0
  89. data/app/components/solidus_admin/tax_rates/index/component.rb +88 -0
  90. data/app/components/solidus_admin/taxes/component.rb +25 -0
  91. data/app/components/solidus_admin/taxes/component.yml +3 -0
  92. data/app/components/solidus_admin/taxonomies/index/component.rb +53 -0
  93. data/app/components/solidus_admin/ui/badge/component.rb +18 -8
  94. data/app/components/solidus_admin/ui/badge/component.yml +3 -0
  95. data/app/components/solidus_admin/ui/button/component.rb +32 -32
  96. data/app/components/solidus_admin/ui/details_list/component.html.erb +10 -0
  97. data/app/components/solidus_admin/ui/details_list/component.rb +7 -0
  98. data/app/components/solidus_admin/ui/dropdown/component.html.erb +50 -0
  99. data/app/components/solidus_admin/ui/dropdown/component.js +16 -0
  100. data/app/components/solidus_admin/ui/dropdown/component.rb +28 -0
  101. data/app/components/solidus_admin/ui/dropdown/component.yml +2 -0
  102. data/app/components/solidus_admin/ui/forms/address/component.html.erb +36 -0
  103. data/app/components/solidus_admin/ui/forms/address/component.js +34 -0
  104. data/app/components/solidus_admin/ui/forms/address/component.rb +14 -0
  105. data/app/components/solidus_admin/ui/forms/field/component.html.erb +5 -4
  106. data/app/components/solidus_admin/ui/forms/field/component.rb +53 -15
  107. data/app/components/solidus_admin/ui/forms/input/component.rb +11 -5
  108. data/app/components/solidus_admin/ui/forms/search/component.html.erb +52 -0
  109. data/app/components/solidus_admin/ui/forms/search/component.js +116 -0
  110. data/app/components/solidus_admin/ui/forms/search/component.rb +8 -0
  111. data/app/components/solidus_admin/ui/forms/search/component.yml +4 -0
  112. data/app/components/solidus_admin/ui/forms/search/result/component.rb +12 -0
  113. data/app/components/solidus_admin/ui/forms/search_field/component.html.erb +20 -0
  114. data/app/{javascript/solidus_admin/controllers/hello_controller.js → components/solidus_admin/ui/forms/search_field/component.js} +4 -2
  115. data/app/components/solidus_admin/ui/forms/search_field/component.rb +10 -0
  116. data/app/components/solidus_admin/ui/forms/search_field/component.yml +2 -0
  117. data/app/components/solidus_admin/ui/forms/switch/component.rb +27 -31
  118. data/app/components/solidus_admin/ui/forms/switch_field/component.html.erb +20 -0
  119. data/app/components/solidus_admin/ui/forms/switch_field/component.rb +11 -0
  120. data/app/components/solidus_admin/ui/icon/component.rb +4 -0
  121. data/app/components/solidus_admin/ui/modal/component.html.erb +37 -0
  122. data/app/components/solidus_admin/ui/modal/component.rb +12 -0
  123. data/app/components/solidus_admin/ui/modal/component.yml +2 -0
  124. data/app/components/solidus_admin/ui/pages/index/component.html.erb +30 -0
  125. data/app/components/solidus_admin/ui/pages/index/component.rb +119 -0
  126. data/app/components/solidus_admin/ui/pages/index/component.yml +4 -0
  127. data/app/components/solidus_admin/ui/panel/component.html.erb +26 -12
  128. data/app/components/solidus_admin/ui/panel/component.rb +17 -0
  129. data/app/components/solidus_admin/ui/panel/component.yml +1 -3
  130. data/app/components/solidus_admin/ui/resource_item/component.html.erb +10 -0
  131. data/app/components/solidus_admin/ui/resource_item/component.rb +9 -0
  132. data/app/components/solidus_admin/ui/tab/component.rb +9 -8
  133. data/app/components/solidus_admin/ui/table/component.html.erb +147 -135
  134. data/app/components/solidus_admin/ui/table/component.js +56 -17
  135. data/app/components/solidus_admin/ui/table/component.rb +94 -70
  136. data/app/components/solidus_admin/ui/table/component.yml +0 -1
  137. data/app/components/solidus_admin/ui/table/ransack_filter/component.html.erb +72 -0
  138. data/app/components/solidus_admin/ui/table/ransack_filter/component.js +73 -0
  139. data/app/components/solidus_admin/ui/table/ransack_filter/component.rb +68 -0
  140. data/app/components/solidus_admin/ui/table/ransack_filter/component.yml +3 -0
  141. data/app/components/solidus_admin/ui/table/toolbar/component.rb +21 -0
  142. data/app/components/solidus_admin/ui/thumbnail/component.rb +46 -0
  143. data/app/components/solidus_admin/ui/toast/component.html.erb +9 -5
  144. data/app/components/solidus_admin/ui/toast/component.js +9 -6
  145. data/app/components/solidus_admin/ui/toast/component.rb +2 -2
  146. data/app/components/solidus_admin/ui/toggletip/component.html.erb +14 -10
  147. data/app/components/solidus_admin/ui/toggletip/component.js +22 -4
  148. data/app/components/solidus_admin/ui/toggletip/component.rb +8 -85
  149. data/app/components/solidus_admin/users/index/component.rb +96 -0
  150. data/app/components/solidus_admin/users/index/component.yml +15 -0
  151. data/app/components/solidus_admin/zones/index/component.rb +63 -0
  152. data/app/controllers/solidus_admin/addresses_controller.rb +92 -0
  153. data/app/controllers/solidus_admin/adjustment_reasons_controller.rb +40 -0
  154. data/app/controllers/solidus_admin/base_controller.rb +1 -0
  155. data/app/controllers/solidus_admin/controller_helpers/authorization.rb +5 -1
  156. data/app/controllers/solidus_admin/controller_helpers/locale.rb +2 -2
  157. data/app/controllers/solidus_admin/controller_helpers/search.rb +48 -0
  158. data/app/controllers/solidus_admin/controller_helpers/theme.rb +30 -0
  159. data/app/controllers/solidus_admin/countries_controller.rb +12 -0
  160. data/app/controllers/solidus_admin/customers_controller.rb +29 -0
  161. data/app/controllers/solidus_admin/line_items_controller.rb +45 -0
  162. data/app/controllers/solidus_admin/option_types_controller.rb +46 -0
  163. data/app/controllers/solidus_admin/orders_controller.rb +104 -7
  164. data/app/controllers/solidus_admin/payment_methods_controller.rb +52 -0
  165. data/app/controllers/solidus_admin/products_controller.rb +26 -17
  166. data/app/controllers/solidus_admin/promotion_categories_controller.rb +29 -0
  167. data/app/controllers/solidus_admin/promotions_controller.rb +46 -0
  168. data/app/controllers/solidus_admin/properties_controller.rb +33 -0
  169. data/app/controllers/solidus_admin/refund_reasons_controller.rb +40 -0
  170. data/app/controllers/solidus_admin/reimbursement_types_controller.rb +31 -0
  171. data/app/controllers/solidus_admin/return_reasons_controller.rb +40 -0
  172. data/app/controllers/solidus_admin/shipping_categories_controller.rb +40 -0
  173. data/app/controllers/solidus_admin/shipping_methods_controller.rb +40 -0
  174. data/app/controllers/solidus_admin/stock_items_controller.rb +67 -0
  175. data/app/controllers/solidus_admin/stock_locations_controller.rb +40 -0
  176. data/app/controllers/solidus_admin/store_credit_reasons_controller.rb +40 -0
  177. data/app/controllers/solidus_admin/stores_controller.rb +40 -0
  178. data/app/controllers/solidus_admin/tax_categories_controller.rb +40 -0
  179. data/app/controllers/solidus_admin/tax_rates_controller.rb +40 -0
  180. data/app/controllers/solidus_admin/taxonomies_controller.rb +46 -0
  181. data/app/controllers/solidus_admin/users_controller.rb +50 -0
  182. data/app/controllers/solidus_admin/zones_controller.rb +40 -0
  183. data/app/javascript/solidus_admin/controllers/components.js +3 -1
  184. data/app/javascript/solidus_admin/controllers/confirm_controller.js +21 -0
  185. data/app/javascript/solidus_admin/controllers/details_click_outside_controller.js +12 -0
  186. data/app/javascript/solidus_admin/controllers/readonly_when_submitting_controller.js +17 -0
  187. data/app/javascript/solidus_admin/controllers/sortable_controller.js +33 -0
  188. data/app/views/layouts/solidus_admin/application.html.erb +16 -10
  189. data/app/views/layouts/solidus_admin/preview.html.erb +2 -1
  190. data/app/views/solidus_admin/base/unauthorized.html.erb +4 -0
  191. data/config/importmap.rb +2 -0
  192. data/config/initializers/view_component.rb +20 -0
  193. data/config/locales/adjustment_reasons.en.yml +6 -0
  194. data/config/locales/customers.en.yml +7 -0
  195. data/config/locales/errors.en.yml +7 -0
  196. data/config/locales/line_items.en.yml +9 -0
  197. data/config/locales/{main_nav.en.yml → menu_item.en.yml} +8 -2
  198. data/config/locales/option_types.en.yml +6 -0
  199. data/config/locales/orders.en.yml +9 -0
  200. data/config/locales/payment_methods.en.yml +6 -0
  201. data/config/locales/promotion_categories.en.yml +6 -0
  202. data/config/locales/promotions.en.yml +6 -0
  203. data/config/locales/properties.en.yml +6 -0
  204. data/config/locales/refund_reasons_.en.yml +6 -0
  205. data/config/locales/reimbursement_types.en.yml +4 -0
  206. data/config/locales/return_reasons.en.yml +6 -0
  207. data/config/locales/shipping_categories.en.yml +6 -0
  208. data/config/locales/shipping_methods.en.yml +6 -0
  209. data/config/locales/stock_items.en.yml +4 -0
  210. data/config/locales/stock_locations.en.yml +6 -0
  211. data/config/locales/store_credit_reasons.en.yml +6 -0
  212. data/config/locales/stores.en.yml +6 -0
  213. data/config/locales/tax_categories.en.yml +6 -0
  214. data/config/locales/tax_rates.en.yml +6 -0
  215. data/config/locales/taxonomies.en.yml +6 -0
  216. data/config/locales/users.en.yml +6 -0
  217. data/config/locales/zones.en.yml +6 -0
  218. data/config/routes.rb +50 -3
  219. data/config/tailwind.config.js +119 -0
  220. data/docs/{customizing_main_navigation.md → customizing_menu_items.md} +2 -2
  221. data/docs/customizing_tailwindcss.md +57 -0
  222. data/docs/customizing_view_components.md +17 -38
  223. data/lib/generators/solidus_admin/install/install_generator.rb +13 -4
  224. data/lib/generators/solidus_admin/install/templates/config/initializers/{solidus_admin.rb → solidus_admin.rb.tt} +10 -14
  225. data/lib/solidus_admin/admin_resources.rb +23 -0
  226. data/lib/solidus_admin/configuration.rb +95 -67
  227. data/lib/solidus_admin/install_tailwindcss.rb +102 -0
  228. data/lib/solidus_admin/{main_nav_item.rb → menu_item.rb} +2 -2
  229. data/lib/solidus_admin/version.rb +1 -1
  230. data/lib/solidus_admin.rb +1 -2
  231. data/lib/tasks/tailwind.rake +10 -0
  232. data/solidus_admin.gemspec +3 -4
  233. metadata +193 -50
  234. data/app/assets/stylesheets/solidus_admin/application.tailwind.css.erb +0 -35
  235. data/app/components/solidus_admin/feedback/component.html.erb +0 -11
  236. data/app/components/solidus_admin/feedback/component.rb +0 -4
  237. data/app/components/solidus_admin/feedback/component.yml +0 -5
  238. data/app/components/solidus_admin/orders/index/component.html.erb +0 -31
  239. data/app/components/solidus_admin/products/index/component.html.erb +0 -30
  240. data/app/components/solidus_admin/sidebar/account_nav/component.html.erb +0 -67
  241. data/app/components/solidus_admin/sidebar/account_nav/component.rb +0 -15
  242. data/app/components/solidus_admin/sidebar/component.rb +0 -21
  243. data/app/components/solidus_admin/ui/panel/component.js +0 -14
  244. data/config/solidus_admin/tailwind.config.js.erb +0 -95
  245. data/docs/customizing_tailwind.md +0 -78
  246. data/lib/solidus_admin/tailwindcss.rb +0 -58
  247. data/lib/tasks/tailwindcss.rake +0 -55
  248. /data/app/components/solidus_admin/{sidebar/account_nav → layout/navigation/account}/component.yml +0 -0
  249. /data/app/components/solidus_admin/{sidebar → layout/navigation}/component.js +0 -0
  250. /data/app/components/solidus_admin/{sidebar → layout/navigation}/component.yml +0 -0
  251. /data/app/components/solidus_admin/{skip_link → layout/skip_link}/component.yml +0 -0
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidusAdmin
4
+ class UsersController < SolidusAdmin::BaseController
5
+ include SolidusAdmin::ControllerHelpers::Search
6
+
7
+ search_scope(:customers, default: true) { _1.left_outer_joins(:role_users).where(role_users: { id: nil }) }
8
+ search_scope(:admin) { _1.joins(:role_users).distinct }
9
+ search_scope(:with_orders) { _1.joins(:orders).distinct }
10
+ search_scope(:without_orders) { _1.left_outer_joins(:orders).where(orders: { id: nil }) }
11
+ search_scope(:all)
12
+
13
+ def index
14
+ users = apply_search_to(
15
+ Spree.user_class.order(created_at: :desc, id: :desc),
16
+ param: :q,
17
+ )
18
+
19
+ set_page_and_extract_portion_from(users)
20
+
21
+ respond_to do |format|
22
+ format.html { render component('users/index').new(page: @page) }
23
+ end
24
+ end
25
+
26
+ def destroy
27
+ @users = Spree.user_class.where(id: params[:id])
28
+
29
+ Spree.user_class.transaction { @users.destroy_all }
30
+
31
+ flash[:notice] = t('.success')
32
+ redirect_back_or_to users_path, status: :see_other
33
+ end
34
+
35
+ private
36
+
37
+ def load_user
38
+ @user = Spree.user_class.find_by!(number: params[:id])
39
+ authorize! action_name, @user
40
+ end
41
+
42
+ def user_params
43
+ params.require(:user).permit(:user_id, permitted_user_attributes)
44
+ end
45
+
46
+ def authorization_subject
47
+ Spree.user_class
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidusAdmin
4
+ class ZonesController < SolidusAdmin::BaseController
5
+ include SolidusAdmin::ControllerHelpers::Search
6
+
7
+ def index
8
+ zones = apply_search_to(
9
+ Spree::Zone.order(id: :desc),
10
+ param: :q
11
+ )
12
+
13
+ set_page_and_extract_portion_from(zones)
14
+
15
+ respond_to do |format|
16
+ format.html { render component('zones/index').new(page: @page) }
17
+ end
18
+ end
19
+
20
+ def destroy
21
+ @zones = Spree::Zone.where(id: params[:id])
22
+
23
+ Spree::Zone.transaction { @zones.destroy_all }
24
+
25
+ flash[:notice] = t('.success')
26
+ redirect_back_or_to zones_path, status: :see_other
27
+ end
28
+
29
+ private
30
+
31
+ def load_zone
32
+ @zone = Spree::Zone.find_by!(number: params[:id])
33
+ authorize! action_name, @zone
34
+ end
35
+
36
+ def zone_params
37
+ params.require(:zone).permit(:zone_id, permitted_zone_attributes)
38
+ end
39
+ end
40
+ end
@@ -1,3 +1,5 @@
1
+ /* eslint no-console: ["error", { allow: ["warn", "error"] }] */
2
+
1
3
  import "@hotwired/stimulus"
2
4
 
3
5
  const registeredControllers = {}
@@ -32,4 +34,4 @@ function registerController(name, module, application) {
32
34
  application.register(name, module.default)
33
35
  registeredControllers[name] = true
34
36
  }
35
- };
37
+ }
@@ -0,0 +1,21 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+
3
+ export default class extends Controller {
4
+ static values = {"text": String}
5
+
6
+ connect() {
7
+ this.element.addEventListener("click", this)
8
+ this.element.addEventListener("submit", this)
9
+ }
10
+
11
+ disconnect() {
12
+ this.element.removeEventListener("click", this)
13
+ this.element.removeEventListener("submit", this)
14
+ }
15
+
16
+ handleEvent(event) {
17
+ if (!confirm(this.textValue)) {
18
+ event.preventDefault()
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,12 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+ import { useClickOutside } from "stimulus-use"
3
+
4
+ export default class extends Controller {
5
+ connect() {
6
+ useClickOutside(this)
7
+ }
8
+
9
+ clickOutside() {
10
+ this.element.removeAttribute("open")
11
+ }
12
+ }
@@ -0,0 +1,17 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+
3
+ export default class extends Controller {
4
+ connect() {
5
+ this.element.addEventListener("submit", this)
6
+ }
7
+
8
+ disconnect() {
9
+ this.element.removeEventListener("submit", this)
10
+ }
11
+
12
+ handleEvent() {
13
+ for (const element of this.element.elements) {
14
+ element.setAttribute("readonly", true)
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,33 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+ import Sortable from "sortablejs"
3
+ import { patch } from '@rails/request.js'
4
+
5
+ export default class extends Controller {
6
+ static values = {
7
+ param: { type: String, default: 'postion' },
8
+ handle: { type: String, default: null },
9
+ animation: { type: Number, default: 150 },
10
+ }
11
+
12
+ connect() {
13
+ this.sortable = Sortable.create(this.element, {
14
+ onEnd: this.onEnd.bind(this),
15
+ animation: this.animationValue,
16
+ handle: this.handleValue,
17
+ })
18
+ }
19
+
20
+ async onEnd({ item, newIndex }) {
21
+ if (!item.dataset.sortableUrl) return
22
+
23
+ const data = new FormData()
24
+ data.append(this.paramValue, newIndex + 1)
25
+
26
+ return await patch(item.dataset.sortableUrl, { body: data, responseKind: "js" })
27
+ }
28
+
29
+ disconnect() {
30
+ this.sortable.destroy()
31
+ this.sortable = null
32
+ }
33
+ }
@@ -2,23 +2,23 @@
2
2
  <html lang="<%= current_locale %>">
3
3
  <head>
4
4
  <%= favicon_link_tag 'solidus_admin/favicon.ico' %>
5
+
5
6
  <title><%= solidus_admin_title %></title>
6
- <%= stylesheet_link_tag "solidus_admin/application.css", "inter-font", "data-turbo-track": "reload" %>
7
+ <meta name="viewport" content="width=device-width,initial-scale=1">
8
+ <%= csrf_meta_tags %>
9
+ <%= csp_meta_tag %>
10
+
11
+ <%= stylesheet_link_tag SolidusAdmin::Config.theme_path(session[:admin_light_theme]), media: '(prefers-color-scheme: light)', "data-turbo-track": "reload" %>
12
+ <%= stylesheet_link_tag SolidusAdmin::Config.theme_path(session[:admin_dark_theme]), media: '(prefers-color-scheme: dark)', "data-turbo-track": "reload" %>
7
13
  <%= javascript_importmap_tags "solidus_admin/application", shim: false, importmap: SolidusAdmin.importmap %>
8
14
  </head>
9
15
 
10
- <body class="bg-gray-15">
11
- <%= render component("skip_link").new(href: "#main") %>
12
- <div class="fixed right-3 bottom-3 flex flex-col gap-3" role="alert">
13
- <% flash.each do |key, message| %>
14
- <%= render component("ui/toast").new(text: message, scheme: key == :error ? :error : :default) %>
15
- <% end %>
16
- </div>
17
-
16
+ <body class="bg-gray-15 font-sans">
17
+ <%= render component("layout/skip_link").new(href: "#main") %>
18
18
  <div class="flex gap-0">
19
19
  <div class="min-w-[240px] border-r border-r-gray-100 relative">
20
20
  <div class="min-h-screen top-0 sticky flex">
21
- <%= render component("sidebar").new(store: current_store) %>
21
+ <%= render component("layout/navigation").new(store: current_store) %>
22
22
  </div>
23
23
  </div>
24
24
 
@@ -26,5 +26,11 @@
26
26
  <%= yield %>
27
27
  </main>
28
28
  </div>
29
+
30
+ <div class="fixed inset-x-0 bottom-3 flex items-center justify-center flex-col gap-3 pointer-events-none" role="alert">
31
+ <% flash.each do |key, message| %>
32
+ <%= render component("ui/toast").new(text: message, scheme: key == :error ? :error : :default) %>
33
+ <% end %>
34
+ </div>
29
35
  </body>
30
36
  </html>
@@ -1,7 +1,8 @@
1
1
  <!DOCTYPE html>
2
2
  <html>
3
3
  <head>
4
- <%= stylesheet_link_tag "solidus_admin/application.css", "inter-font", "data-turbo-track": "reload" %>
4
+ <%= stylesheet_link_tag SolidusAdmin::Config.theme_path(session[:admin_light_theme]), media: '(prefers-color-scheme: light)', "data-turbo-track": "reload" %>
5
+ <%= stylesheet_link_tag SolidusAdmin::Config.theme_path(session[:admin_dark_theme]), media: '(prefers-color-scheme: dark)', "data-turbo-track": "reload" %>
5
6
  <%= javascript_importmap_tags "solidus_admin/application", shim: false, importmap: SolidusAdmin.importmap %>
6
7
  </head>
7
8
  <body class="p-3">
@@ -0,0 +1,4 @@
1
+ <div class="p-4">
2
+ <h1 class="text-3xl font-semibold text-solidus-red mb-4"><%= t('solidus_admin.errors.authorization.access_denied.title') %></h1>
3
+ <p class="text-lg text-gray-700"><%= t('solidus_admin.errors.authorization.access_denied.description') %></p>
4
+ </div>
data/config/importmap.rb CHANGED
@@ -6,6 +6,8 @@ pin "@hotwired/stimulus-loading", to: "stimulus-loading.js"
6
6
  pin "@hotwired/turbo-rails", to: "turbo.js"
7
7
 
8
8
  pin "stimulus-use", to: "https://ga.jspm.io/npm:stimulus-use@0.52.0/dist/index.js"
9
+ pin "sortablejs", to: "https://cdn.jsdelivr.net/npm/sortablejs@1.15.0/+esm"
10
+ pin "@rails/request.js", to: "https://cdn.jsdelivr.net/npm/@rails/request.js@0.0.9/+esm"
9
11
 
10
12
  pin "solidus_admin/application", preload: true
11
13
  pin "solidus_admin/utils"
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ Rails.application.config.view_component.capture_compatibility_patch_enabled = true
4
+
5
+ if Rails.env.development? || Rails.env.test?
6
+ Rails.application.config.view_component.instrumentation_enabled = true
7
+ Rails.application.config.view_component.use_deprecated_instrumentation_name = false
8
+
9
+ bold = "\e[1m"
10
+ clear = "\e[0m"
11
+
12
+ ActiveSupport::Notifications.subscribe("render.view_component") do |*args|
13
+ next unless args.last[:name]&.starts_with?("SolidusAdmin::")
14
+
15
+ event = ActiveSupport::Notifications::Event.new(*args)
16
+ SolidusAdmin::BaseComponent.logger.debug \
17
+ " Rendered #{bold}#{event.payload[:name]}#{clear}" \
18
+ " (Duration: #{event.duration.round(1)}ms)"
19
+ end
20
+ end
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ adjustment_reasons:
4
+ title: "Adjustment Reasons"
5
+ destroy:
6
+ success: "Adjustment Reasons were successfully removed."
@@ -0,0 +1,7 @@
1
+ en:
2
+ solidus_admin:
3
+ customers:
4
+ title: "Customers"
5
+ destroy:
6
+ success: "Customer was removed successfully"
7
+ error: "Customer could not be removed"
@@ -0,0 +1,7 @@
1
+ en:
2
+ solidus_admin:
3
+ errors:
4
+ authorization:
5
+ access_denied:
6
+ title: "Access Denied"
7
+ description: "You are not authorized to access this page."
@@ -0,0 +1,9 @@
1
+ en:
2
+ solidus_admin:
3
+ line_items:
4
+ update:
5
+ success: "Quantity updated successfully"
6
+ create:
7
+ success: "Variant added to cart successfully"
8
+ destroy:
9
+ success: "Line item removed successfully"
@@ -1,13 +1,19 @@
1
1
  en:
2
2
  solidus_admin:
3
- main_nav:
3
+ menu_item:
4
4
  orders: Orders
5
5
  products: Products
6
6
  option_types: Option Types
7
- property_types: Property Types
7
+ property_types: Properties
8
8
  taxonomies: Taxonomies
9
9
  taxons: Display Order
10
10
  promotions: Promotions
11
+ promotion_categories: Promotion Categories
11
12
  stock: Stock
12
13
  users: Users
13
14
  settings: Settings
15
+ stores: Stores
16
+ taxes: Taxes
17
+ checkout: Refunds and Returns
18
+ shipping: Shipping
19
+ zones: Zones
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ option_types:
4
+ title: "Option Types"
5
+ destroy:
6
+ success: "Option Types were successfully removed."
@@ -2,3 +2,12 @@ en:
2
2
  solidus_admin:
3
3
  orders:
4
4
  title: "Orders"
5
+ update:
6
+ success: "Order was updated successfully"
7
+ error: "Order could not be updated"
8
+ addresses:
9
+ title: "Addresses"
10
+ update:
11
+ success: "The address has been successfully updated."
12
+ errors:
13
+ address_type_invalid: "Invalid address type. Please select either billing or shipping address."
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ payment_methods:
4
+ title: "Payment Methods"
5
+ destroy:
6
+ success: "Payment Methods were successfully removed."
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ promotion_categories:
4
+ title: "Promotion Categories"
5
+ destroy:
6
+ success: "Promotion Categories were successfully removed."
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ promotions:
4
+ title: "Promotions"
5
+ destroy:
6
+ success: "Promotions were successfully removed."
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ properties:
4
+ title: "Properties"
5
+ destroy:
6
+ success: "Properties were successfully removed."
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ refund_reasons:
4
+ title: "Refund Reasons"
5
+ destroy:
6
+ success: "Refund Reasons were successfully removed."
@@ -0,0 +1,4 @@
1
+ en:
2
+ solidus_admin:
3
+ reimbursement_types:
4
+ title: "Reimbursement Types"
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ return_reasons:
4
+ title: "Return Reasons"
5
+ destroy:
6
+ success: "Return Reasons were successfully removed."
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ shipping_categories:
4
+ title: "Shipping Categories"
5
+ destroy:
6
+ success: "Shipping categories were successfully removed."
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ shipping_methods:
4
+ title: "Shipping Methods"
5
+ destroy:
6
+ success: "Shipping methods were successfully removed."
@@ -0,0 +1,4 @@
1
+ en:
2
+ solidus_admin:
3
+ stock_items:
4
+ title: "Stock Items"
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ stock_locations:
4
+ title: "Stock Locations"
5
+ destroy:
6
+ success: "Stock locations were successfully removed."
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ store_credit_reasons:
4
+ title: "Store Credit Reasons"
5
+ destroy:
6
+ success: "Store Credit Reasons were successfully removed."
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ stores:
4
+ title: "Stores"
5
+ destroy:
6
+ success: "Stores were successfully removed."
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ tax_categories:
4
+ title: "Tax Categories"
5
+ destroy:
6
+ success: "Tax categories were successfully removed."
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ tax_rates:
4
+ title: "Tax Rates"
5
+ destroy:
6
+ success: "Tax rates were successfully removed."
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ taxonomies:
4
+ title: "Taxonomies"
5
+ destroy:
6
+ success: "Taxonomies were successfully removed."
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ users:
4
+ title: "Users"
5
+ destroy:
6
+ success: "Users were successfully removed."
@@ -0,0 +1,6 @@
1
+ en:
2
+ solidus_admin:
3
+ zones:
4
+ title: "Zones"
5
+ destroy:
6
+ success: "Zones were successfully removed."
data/config/routes.rb CHANGED
@@ -1,13 +1,60 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  SolidusAdmin::Engine.routes.draw do
4
+ require "solidus_admin/admin_resources"
5
+ extend SolidusAdmin::AdminResources
6
+
4
7
  resource :account, only: :show
5
- resources :products, only: [:index, :show, :edit, :update] do
8
+ resources :countries, only: [] do
9
+ get 'states', to: 'countries#states'
10
+ end
11
+
12
+ admin_resources :products, only: [:index, :update, :destroy] do
6
13
  collection do
7
- delete :destroy
8
14
  put :discontinue
9
15
  put :activate
10
16
  end
11
17
  end
12
- resources :orders, only: :index
18
+
19
+ # Needs a constraint to avoid interpreting "new" as a product's slug
20
+ admin_resources :products, only: [
21
+ :show, :edit
22
+ ], constraints: ->{ SolidusAdmin::Config.enable_alpha_features? && _1.path != "/admin/products/new" }
23
+
24
+ admin_resources :orders, only: [:index]
25
+
26
+ admin_resources :orders, except: [
27
+ :destroy, :index
28
+ ], constraints: ->{ SolidusAdmin::Config.enable_alpha_features? } do
29
+ resources :line_items, only: [:destroy, :create, :update]
30
+ resource :customer
31
+ resource :ship_address, only: [:show, :edit, :update], controller: "addresses", type: "ship"
32
+ resource :bill_address, only: [:show, :edit, :update], controller: "addresses", type: "bill"
33
+
34
+ member do
35
+ get :variants_for
36
+ get :customers_for
37
+ end
38
+ end
39
+
40
+ admin_resources :users, only: [:index, :destroy]
41
+ admin_resources :promotions, only: [:index, :destroy]
42
+ admin_resources :properties, only: [:index, :destroy]
43
+ admin_resources :option_types, only: [:index, :destroy], sortable: true
44
+ admin_resources :taxonomies, only: [:index, :destroy], sortable: true
45
+ admin_resources :promotion_categories, only: [:index, :destroy]
46
+ admin_resources :tax_categories, only: [:index, :destroy]
47
+ admin_resources :tax_rates, only: [:index, :destroy]
48
+ admin_resources :payment_methods, only: [:index, :destroy], sortable: true
49
+ admin_resources :stock_items, only: [:index, :edit, :update]
50
+ admin_resources :shipping_methods, only: [:index, :destroy]
51
+ admin_resources :shipping_categories, only: [:index, :destroy]
52
+ admin_resources :stock_locations, only: [:index, :destroy]
53
+ admin_resources :stores, only: [:index, :destroy]
54
+ admin_resources :zones, only: [:index, :destroy]
55
+ admin_resources :refund_reasons, only: [:index, :destroy]
56
+ admin_resources :reimbursement_types, only: [:index]
57
+ admin_resources :return_reasons, only: [:index, :destroy]
58
+ admin_resources :adjustment_reasons, only: [:index, :destroy]
59
+ admin_resources :store_credit_reasons, only: [:index, :destroy]
13
60
  end