solidus_admin 0.0.2 → 0.2.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 (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