spree_admin 5.0.3 → 5.1.0.beta

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 (268) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/login_sidebar_background.png +0 -0
  3. data/app/assets/stylesheets/spree/admin/components/_bulk_panel.scss +8 -1
  4. data/app/assets/stylesheets/spree/admin/components/_buttons.scss +12 -20
  5. data/app/assets/stylesheets/spree/admin/components/_cards.scss +9 -3
  6. data/app/assets/stylesheets/spree/admin/components/_dropdowns.scss +13 -40
  7. data/app/assets/stylesheets/spree/admin/components/_filters.scss +32 -3
  8. data/app/assets/stylesheets/spree/admin/components/_main.scss +107 -31
  9. data/app/assets/stylesheets/spree/admin/components/_media_form.scss +21 -9
  10. data/app/assets/stylesheets/spree/admin/components/_modals.scss +4 -3
  11. data/app/assets/stylesheets/spree/admin/components/_navbar.scss +5 -9
  12. data/app/assets/stylesheets/spree/admin/components/_navigation.scss +0 -1
  13. data/app/assets/stylesheets/spree/admin/components/_sortable_tree.scss +6 -2
  14. data/app/assets/stylesheets/spree/admin/components/_tables.scss +35 -5
  15. data/app/assets/stylesheets/spree/admin/global/_variables.scss +37 -17
  16. data/app/assets/stylesheets/spree/admin/plugins/tom-select.bootstrap4.scss +5 -4
  17. data/app/assets/stylesheets/spree/admin/shared/_base.scss +50 -17
  18. data/app/assets/stylesheets/spree/admin/shared/_forms.scss +6 -2
  19. data/app/assets/stylesheets/spree/admin/views/_page_builder.scss +30 -21
  20. data/app/controllers/concerns/spree/admin/breadcrumb_concern.rb +22 -0
  21. data/app/controllers/concerns/spree/admin/preferences_concern.rb +22 -0
  22. data/app/controllers/concerns/spree/admin/products_breadcrumb_concern.rb +22 -0
  23. data/app/controllers/concerns/spree/admin/promotions_breadcrumb_concern.rb +23 -0
  24. data/app/controllers/concerns/spree/admin/storefront_breadcrumb_concern.rb +12 -0
  25. data/app/controllers/spree/admin/addresses_controller.rb +4 -0
  26. data/app/controllers/spree/admin/admin_users_controller.rb +112 -0
  27. data/app/controllers/spree/admin/assets_controller.rb +7 -9
  28. data/app/controllers/spree/admin/base_controller.rb +21 -10
  29. data/app/controllers/spree/admin/checkouts_controller.rb +4 -0
  30. data/app/controllers/spree/admin/classifications_controller.rb +4 -0
  31. data/app/controllers/spree/admin/coupon_codes_controller.rb +2 -0
  32. data/app/controllers/spree/admin/custom_domains_controller.rb +6 -0
  33. data/app/controllers/spree/admin/customer_returns_controller.rb +4 -0
  34. data/app/controllers/spree/admin/dashboard_controller.rb +19 -14
  35. data/app/controllers/spree/admin/digital_assets_controller.rb +8 -0
  36. data/app/controllers/spree/admin/exports_controller.rb +6 -2
  37. data/app/controllers/spree/admin/integrations_controller.rb +61 -0
  38. data/app/controllers/spree/admin/invitations_controller.rb +128 -0
  39. data/app/controllers/spree/admin/line_items_controller.rb +4 -0
  40. data/app/controllers/spree/admin/oauth_applications_controller.rb +6 -0
  41. data/app/controllers/spree/admin/option_types_controller.rb +15 -0
  42. data/app/controllers/spree/admin/option_values_controller.rb +4 -0
  43. data/app/controllers/spree/admin/orders/return_authorizations_controller.rb +4 -0
  44. data/app/controllers/spree/admin/orders_controller.rb +11 -0
  45. data/app/controllers/spree/admin/page_blocks_controller.rb +3 -2
  46. data/app/controllers/spree/admin/page_links_controller.rb +9 -0
  47. data/app/controllers/spree/admin/page_sections_controller.rb +13 -4
  48. data/app/controllers/spree/admin/pages_controller.rb +7 -0
  49. data/app/controllers/spree/admin/payment_methods_controller.rb +23 -12
  50. data/app/controllers/spree/admin/post_categories_controller.rb +3 -0
  51. data/app/controllers/spree/admin/posts_controller.rb +11 -0
  52. data/app/controllers/spree/admin/products_controller.rb +11 -8
  53. data/app/controllers/spree/admin/promotion_actions_controller.rb +10 -2
  54. data/app/controllers/spree/admin/promotion_rules_controller.rb +10 -2
  55. data/app/controllers/spree/admin/promotions_controller.rb +6 -0
  56. data/app/controllers/spree/admin/properties_controller.rb +15 -0
  57. data/app/controllers/spree/admin/refund_reasons_controller.rb +7 -0
  58. data/app/controllers/spree/admin/refunds_controller.rb +4 -0
  59. data/app/controllers/spree/admin/reimbursement_types_controller.rb +7 -0
  60. data/app/controllers/spree/admin/reimbursements_controller.rb +4 -0
  61. data/app/controllers/spree/admin/reports_controller.rb +12 -2
  62. data/app/controllers/spree/admin/resource_controller.rb +1 -1
  63. data/app/controllers/spree/admin/return_authorization_reasons_controller.rb +7 -0
  64. data/app/controllers/spree/admin/return_authorizations_controller.rb +4 -0
  65. data/app/controllers/spree/admin/return_items_controller.rb +6 -0
  66. data/app/controllers/spree/admin/role_users_controller.rb +36 -0
  67. data/app/controllers/spree/admin/roles_controller.rb +8 -0
  68. data/app/controllers/spree/admin/shipments_controller.rb +2 -2
  69. data/app/controllers/spree/admin/shipping_categories_controller.rb +7 -0
  70. data/app/controllers/spree/admin/shipping_methods_controller.rb +6 -0
  71. data/app/controllers/spree/admin/stock_items_controller.rb +13 -0
  72. data/app/controllers/spree/admin/stock_locations_controller.rb +7 -0
  73. data/app/controllers/spree/admin/stock_transfers_controller.rb +14 -2
  74. data/app/controllers/spree/admin/store_credit_categories_controller.rb +5 -0
  75. data/app/controllers/spree/admin/store_credits_controller.rb +4 -0
  76. data/app/controllers/spree/admin/storefront_controller.rb +3 -0
  77. data/app/controllers/spree/admin/stores_controller.rb +17 -2
  78. data/app/controllers/spree/admin/tax_categories_controller.rb +7 -0
  79. data/app/controllers/spree/admin/tax_rates_controller.rb +6 -0
  80. data/app/controllers/spree/admin/taxonomies_controller.rb +15 -0
  81. data/app/controllers/spree/admin/taxons_controller.rb +24 -1
  82. data/app/controllers/spree/admin/themes_controller.rb +7 -0
  83. data/app/controllers/spree/admin/translations_controller.rb +9 -1
  84. data/app/controllers/spree/admin/user_passwords_controller.rb +22 -0
  85. data/app/controllers/spree/admin/user_sessions_controller.rb +23 -0
  86. data/app/controllers/spree/admin/users_controller.rb +11 -2
  87. data/app/controllers/spree/admin/variants_controller.rb +13 -0
  88. data/app/controllers/spree/admin/webhooks_subscribers_controller.rb +34 -12
  89. data/app/controllers/spree/admin/zones_controller.rb +5 -0
  90. data/app/helpers/spree/admin/base_helper.rb +33 -32
  91. data/app/helpers/spree/admin/bulk_operations_helper.rb +8 -2
  92. data/app/helpers/spree/admin/modal_helper.rb +1 -1
  93. data/app/helpers/spree/admin/navigation_helper.rb +12 -6
  94. data/app/helpers/spree/admin/posts_helper.rb +1 -1
  95. data/app/helpers/spree/admin/session_assets_helper.rb +1 -1
  96. data/app/helpers/spree/admin/stores_helper.rb +1 -18
  97. data/app/helpers/spree/admin/tags_helper.rb +2 -2
  98. data/app/javascript/spree/admin/application.js +2 -2
  99. data/app/javascript/spree/admin/controllers/asset_uploader_controller.js +3 -2
  100. data/app/javascript/spree/admin/controllers/variants_form_controller.js +3 -2
  101. data/app/javascript/spree/admin/helpers/bootstrap.js +3 -3
  102. data/app/javascript/spree/admin/helpers/trix/video_embed.js +2 -2
  103. data/app/views/active_storage/_upload_form.html.erb +1 -1
  104. data/app/views/layouts/spree/minimal.html.erb +22 -0
  105. data/app/views/spree/admin/admin_users/_admin_user.html.erb +19 -0
  106. data/app/views/spree/admin/admin_users/_audit_log.html.erb +5 -0
  107. data/app/views/spree/admin/admin_users/_form.html.erb +12 -0
  108. data/app/views/spree/admin/admin_users/edit.html.erb +35 -0
  109. data/app/views/spree/admin/admin_users/index.html.erb +18 -0
  110. data/app/views/spree/admin/admin_users/new.html.erb +21 -0
  111. data/app/views/spree/admin/admin_users/show.html.erb +113 -0
  112. data/app/views/spree/admin/coupon_codes/index.html.erb +6 -6
  113. data/app/views/spree/admin/custom_domains/_custom_domains.html.erb +1 -1
  114. data/app/views/spree/admin/customer_returns/index.html.erb +1 -1
  115. data/app/views/spree/admin/dashboard/_store_preview.html.erb +1 -1
  116. data/app/views/spree/admin/dashboard/_top_products.html.erb +5 -3
  117. data/app/views/spree/admin/digital_assets/_table.html.erb +1 -1
  118. data/app/views/spree/admin/digital_assets/index.html.erb +0 -1
  119. data/app/views/spree/admin/exports/index.html.erb +1 -1
  120. data/app/views/spree/admin/integrations/_integration.html.erb +36 -0
  121. data/app/views/spree/admin/integrations/edit.html.erb +11 -0
  122. data/app/views/spree/admin/integrations/index.html.erb +23 -0
  123. data/app/views/spree/admin/integrations/new.html.erb +14 -0
  124. data/app/views/spree/admin/invitations/_invitation.html.erb +52 -0
  125. data/app/views/spree/admin/invitations/create.turbo_stream.erb +4 -0
  126. data/app/views/spree/admin/invitations/index.html.erb +21 -0
  127. data/app/views/spree/admin/invitations/new.html.erb +32 -0
  128. data/app/views/spree/admin/invitations/show.html.erb +9 -0
  129. data/app/views/spree/admin/line_items/new.html.erb +2 -2
  130. data/app/views/spree/admin/oauth_applications/index.html.erb +1 -1
  131. data/app/views/spree/admin/option_types/edit.html.erb +1 -1
  132. data/app/views/spree/admin/option_types/index.html.erb +1 -1
  133. data/app/views/spree/admin/orders/_customer.html.erb +1 -2
  134. data/app/views/spree/admin/orders/_filters.html.erb +28 -22
  135. data/app/views/spree/admin/orders/_list.html.erb +1 -1
  136. data/app/views/spree/admin/orders/_refunds.html.erb +1 -1
  137. data/app/views/spree/admin/orders/_shipment.html.erb +1 -1
  138. data/app/views/spree/admin/orders/_summary.html.erb +1 -1
  139. data/app/views/spree/admin/orders/_table_filter_dropdown.html.erb +2 -2
  140. data/app/views/spree/admin/orders/customer_returns/_customer_return.html.erb +1 -1
  141. data/app/views/spree/admin/orders/customer_returns/_return_item_decision.html.erb +1 -1
  142. data/app/views/spree/admin/orders/return_authorizations/_form.html.erb +1 -1
  143. data/app/views/spree/admin/orders/return_authorizations/show.html.erb +2 -2
  144. data/app/views/spree/admin/page_blocks/_form_tab_buttons.html.erb +5 -7
  145. data/app/views/spree/admin/page_blocks/edit.html.erb +3 -5
  146. data/app/views/spree/admin/page_blocks/forms/_image.html.erb +9 -0
  147. data/app/views/spree/admin/page_builder/_add_block.html.erb +1 -1
  148. data/app/views/spree/admin/page_builder/_header.html.erb +35 -28
  149. data/app/views/spree/admin/page_builder/_pages_dropdown.html.erb +15 -21
  150. data/app/views/spree/admin/page_builder/_sidebar.html.erb +1 -1
  151. data/app/views/spree/admin/page_builder/_sidebar_block.html.erb +11 -10
  152. data/app/views/spree/admin/page_builder/_sidebar_sections_toolbar.html.erb +152 -39
  153. data/app/views/spree/admin/page_links/_list.html.erb +2 -2
  154. data/app/views/spree/admin/page_links/edit.html.erb +2 -4
  155. data/app/views/spree/admin/page_sections/_form_tab_buttons.html.erb +6 -10
  156. data/app/views/spree/admin/page_sections/new.html.erb +1 -1
  157. data/app/views/spree/admin/pages/edit.html.erb +2 -2
  158. data/app/views/spree/admin/payment_methods/_form.html.erb +1 -1
  159. data/app/views/spree/admin/payment_methods/index.html.erb +16 -15
  160. data/app/views/spree/admin/payments/_payment.html.erb +1 -1
  161. data/app/views/spree/admin/post_categories/index.html.erb +1 -1
  162. data/app/views/spree/admin/posts/index.html.erb +1 -1
  163. data/app/views/spree/admin/products/_bulk_operations.html.erb +1 -1
  164. data/app/views/spree/admin/products/_filters.html.erb +2 -5
  165. data/app/views/spree/admin/products/_list.html.erb +1 -1
  166. data/app/views/spree/admin/products/_table_filter_dropdown.html.erb +2 -2
  167. data/app/views/spree/admin/products/form/_categorization.html.erb +34 -30
  168. data/app/views/spree/admin/products/form/_variants.html.erb +1 -0
  169. data/app/views/spree/admin/promotion_actions/_promotion_action.html.erb +1 -1
  170. data/app/views/spree/admin/promotion_rules/_promotion_rule.html.erb +1 -1
  171. data/app/views/spree/admin/promotions/_filters.html.erb +2 -6
  172. data/app/views/spree/admin/promotions/_header.html.erb +1 -3
  173. data/app/views/spree/admin/promotions/_sidebar.html.erb +18 -0
  174. data/app/views/spree/admin/promotions/_table_filter_dropdown.html.erb +2 -2
  175. data/app/views/spree/admin/promotions/index.html.erb +1 -1
  176. data/app/views/spree/admin/properties/edit.html.erb +1 -1
  177. data/app/views/spree/admin/properties/index.html.erb +1 -1
  178. data/app/views/spree/admin/refund_reasons/index.html.erb +1 -1
  179. data/app/views/spree/admin/reimbursement_types/index.html.erb +1 -1
  180. data/app/views/spree/admin/reimbursements/edit.html.erb +2 -2
  181. data/app/views/spree/admin/reimbursements/show.html.erb +1 -1
  182. data/app/views/spree/admin/reports/_report.html.erb +1 -1
  183. data/app/views/spree/admin/return_authorization_reasons/index.html.erb +1 -1
  184. data/app/views/spree/admin/return_authorizations/_filters.html.erb +2 -2
  185. data/app/views/spree/admin/return_authorizations/_list.html.erb +1 -1
  186. data/app/views/spree/admin/roles/edit.html.erb +6 -4
  187. data/app/views/spree/admin/roles/index.html.erb +11 -7
  188. data/app/views/spree/admin/shared/_alerts.html.erb +1 -1
  189. data/app/views/spree/admin/shared/_breadcrumbs.html.erb +13 -0
  190. data/app/views/spree/admin/shared/_calendar_range_picker.html.erb +1 -1
  191. data/app/views/spree/admin/shared/_content_header.html.erb +3 -3
  192. data/app/views/spree/admin/shared/_filters_button.html.erb +1 -1
  193. data/app/views/spree/admin/shared/_filters_search_bar.html.erb +1 -1
  194. data/app/views/spree/admin/shared/_head.html.erb +10 -1
  195. data/app/views/spree/admin/shared/_header.html.erb +26 -17
  196. data/app/views/spree/admin/shared/_index_table_options.html.erb +1 -1
  197. data/app/views/spree/admin/shared/_multi_product_picker.html.erb +1 -1
  198. data/app/views/spree/admin/shared/_new_item_dropdown.html.erb +32 -0
  199. data/app/views/spree/admin/shared/_no_resource_found.html.erb +6 -3
  200. data/app/views/spree/admin/shared/_offcanvas_nav.html.erb +1 -14
  201. data/app/views/spree/admin/shared/_refunds.html.erb +1 -1
  202. data/app/views/spree/admin/shared/_sidebar.html.erb +0 -8
  203. data/app/views/spree/admin/shared/_tax_nav.html.erb +1 -0
  204. data/app/views/spree/admin/shared/_team_nav.html.erb +13 -0
  205. data/app/views/spree/admin/shared/_user_dropdown.html.erb +25 -20
  206. data/app/views/spree/admin/shared/devise/_links.html.erb +18 -0
  207. data/app/views/spree/admin/shared/sidebar/_enterprise_edition_notice.html.erb +7 -5
  208. data/app/views/spree/admin/shared/sidebar/_integrations_nav.html.erb +5 -7
  209. data/app/views/spree/admin/shared/sidebar/_orders_nav.html.erb +2 -2
  210. data/app/views/spree/admin/shared/sidebar/_products_nav.html.erb +2 -2
  211. data/app/views/spree/admin/shared/sidebar/_promotions_nav.html.erb +17 -0
  212. data/app/views/spree/admin/shared/sidebar/_returns_nav.html.erb +1 -1
  213. data/app/views/spree/admin/shared/sidebar/_store_dropdown.html.erb +33 -75
  214. data/app/views/spree/admin/shared/sidebar/_store_nav.html.erb +17 -36
  215. data/app/views/spree/admin/shared/sidebar/_storefront_nav.html.erb +6 -2
  216. data/app/views/spree/admin/shared/sidebar/_vendors_nav.html.erb +9 -7
  217. data/app/views/spree/admin/shared/sortable_tree/_taxonomy.html.erb +1 -1
  218. data/app/views/spree/admin/shipping_categories/index.html.erb +1 -1
  219. data/app/views/spree/admin/shipping_methods/_form.html.erb +7 -134
  220. data/app/views/spree/admin/shipping_methods/form/_display.html.erb +25 -0
  221. data/app/views/spree/admin/shipping_methods/form/_estimated_transit_business_days.html.erb +23 -0
  222. data/app/views/spree/admin/shipping_methods/form/_shipping_categories.html.erb +21 -0
  223. data/app/views/spree/admin/shipping_methods/form/_tax_category.html.erb +16 -0
  224. data/app/views/spree/admin/shipping_methods/form/_tracking_url.html.erb +18 -0
  225. data/app/views/spree/admin/shipping_methods/form/_zones.html.erb +26 -0
  226. data/app/views/spree/admin/shipping_methods/index.html.erb +1 -1
  227. data/app/views/spree/admin/stock_items/index.html.erb +1 -1
  228. data/app/views/spree/admin/stock_locations/_stock_location.html.erb +5 -3
  229. data/app/views/spree/admin/stock_locations/index.html.erb +4 -2
  230. data/app/views/spree/admin/stock_transfers/index.html.erb +1 -1
  231. data/app/views/spree/admin/store_credit_categories/index.html.erb +1 -1
  232. data/app/views/spree/admin/store_credits/_list.html.erb +1 -1
  233. data/app/views/spree/admin/stores/edit_emails.html.erb +1 -1
  234. data/app/views/spree/admin/stores/form/_basic.html.erb +1 -1
  235. data/app/views/spree/admin/stores/form/_emails.html.erb +1 -1
  236. data/app/views/spree/admin/tax_categories/index.html.erb +1 -1
  237. data/app/views/spree/admin/tax_rates/index.html.erb +1 -1
  238. data/app/views/spree/admin/taxonomies/index.html.erb +1 -1
  239. data/app/views/spree/admin/themes/_theme.html.erb +6 -4
  240. data/app/views/spree/admin/themes/_theme_preview_image.html.erb +6 -4
  241. data/app/views/spree/admin/themes/index.html.erb +1 -1
  242. data/app/views/spree/admin/translations/edit.html.erb +1 -1
  243. data/app/views/spree/admin/user_passwords/edit.html.erb +21 -0
  244. data/app/views/spree/admin/user_passwords/new.html.erb +12 -0
  245. data/app/views/spree/admin/user_sessions/new.html.erb +16 -0
  246. data/app/views/spree/admin/users/_form.html.erb +10 -8
  247. data/app/views/spree/admin/users/_user.html.erb +4 -4
  248. data/app/views/spree/admin/users/index.html.erb +4 -4
  249. data/app/views/spree/admin/users/new.html.erb +1 -1
  250. data/app/views/spree/admin/variants/_search_result.html.erb +1 -1
  251. data/app/views/spree/admin/variants/form/_media.html.erb +1 -0
  252. data/app/views/spree/admin/variants/form/_media_asset.html.erb +1 -1
  253. data/app/views/spree/admin/webhooks_subscribers/_form.html.erb +37 -19
  254. data/app/views/spree/admin/webhooks_subscribers/_webhooks_subscriber.html.erb +12 -6
  255. data/app/views/spree/admin/webhooks_subscribers/edit.html.erb +2 -2
  256. data/app/views/spree/admin/webhooks_subscribers/index.html.erb +1 -1
  257. data/app/views/spree/admin/webhooks_subscribers/show.html.erb +58 -47
  258. data/app/views/spree/admin/zones/_form.html.erb +11 -15
  259. data/app/views/spree/admin/zones/index.html.erb +1 -1
  260. data/config/importmap.rb +2 -2
  261. data/config/locales/en.yml +3 -0
  262. data/config/routes.rb +13 -1
  263. data/lib/spree/admin/engine.rb +11 -1
  264. data/lib/spree/admin.rb +1 -0
  265. data/vendor/javascript/bootstrap--dist--js--bootstrap.bundle.min.js.js +4 -4
  266. data/vendor/javascript/dompurify.js +24 -24
  267. metadata +65 -9
  268. data/app/javascript/spree/admin/controllers/webhook_subscriber_events_controller.js +0 -19
@@ -0,0 +1,22 @@
1
+ <!DOCTYPE html>
2
+ <html lang="<%= I18n.locale %>">
3
+ <head>
4
+ <%= render "spree/admin/shared/head" %>
5
+ </head>
6
+ <body class="admin min-vh-100 <%= controller_name %> <%= action_name %>">
7
+ <div class="container-fluid">
8
+ <div class="row bg-white">
9
+ <div
10
+ class="col-lg-5 d-none d-lg-flex bg-light min-vh-100"
11
+ style="background-image: url('<%= asset_path('login_sidebar_background.png') %>');background-repeat: no-repeat;background-size: cover;background-position: center')"
12
+ >
13
+ </div>
14
+ <div class="col-lg-6 col-xl-4 offset-xl-1 py-3 d-flex flex-column justify-content-center vh-100">
15
+ <%= yield %>
16
+ </div>
17
+ </div>
18
+ </div>
19
+ <%= render "spree/admin/shared/modal" %>
20
+ <%= render "spree/admin/shared/alerts" %>
21
+ </body>
22
+ </html>
@@ -0,0 +1,19 @@
1
+ <tr id="<%= spree_dom_id admin_user %>" class="cursor-pointer" data-controller="row-link">
2
+ <td class="w-50" data-action="click->row-link#openLink">
3
+ <%= link_to spree.admin_admin_user_path(admin_user), data: { row_link_target: :link }, class: 'd-flex align-items-center' do %>
4
+ <%= render_avatar(admin_user, width: 48, height: 48, class: 'mr-3 avatar') %>
5
+ <div class="d-flex flex-column">
6
+ <%= admin_user.name %>
7
+ <span class="text-muted"><%= admin_user.email %></span>
8
+ </div>
9
+ <% end %>
10
+ </td>
11
+ <td class="w-30" data-action="click->row-link#openLink">
12
+ <% admin_user.role_users.each do |role_user| %>
13
+ <span class="badge badge-light"><%= role_user.role.name %></span>
14
+ <% end %>
15
+ </td>
16
+ <td class="w-20">
17
+ <%= local_time(admin_user.created_at) %>
18
+ </td>
19
+ </tr>
@@ -0,0 +1,5 @@
1
+ <div class="text-muted text-center py-5">
2
+ <p>Audit log is part of the Spree Enterprise offering.</p>
3
+
4
+ <%= external_link_to 'Upgrade to Spree Enterprise', 'https://spreecommerce.org/pricing', class: 'btn btn-primary' %>
5
+ </div>
@@ -0,0 +1,12 @@
1
+ <div class="form-group">
2
+ <%= f.label :email %>
3
+ <%= f.email_field :email, class: 'form-control', required: true, autofocus: true %>
4
+ </div>
5
+ <div class="form-group">
6
+ <%= f.label :first_name %>
7
+ <%= f.text_field :first_name, class: 'form-control', required: true %>
8
+ </div>
9
+ <div class="form-group">
10
+ <%= f.label :last_name %>
11
+ <%= f.text_field :last_name, class: 'form-control', required: true %>
12
+ </div>
@@ -0,0 +1,35 @@
1
+ <% content_for :page_title do %>
2
+ <%= page_header_back_button spree.admin_admin_users_path %>
3
+ <%= @admin_user.name %>
4
+ <% end %>
5
+
6
+ <%= content_for :title do %>
7
+ <%= @admin_user.name %>
8
+ <% end %>
9
+
10
+ <%= turbo_frame_tag :edit_user do %>
11
+ <div class="card-header d-flex align-items-center justify-content-between">
12
+ <h5 class="card-title">
13
+ <%= Spree.t(:details) %>
14
+ </h5>
15
+ <%= link_to Spree.t('actions.discard'), spree.admin_admin_user_path(@admin_user), class: 'btn btn-light btn-sm' %>
16
+ </div>
17
+ <%= form_for [:admin, @admin_user], as: :admin_user, url: spree.admin_admin_user_path(@admin_user), method: :put do |f| %>
18
+ <div class="card-body">
19
+ <%= render'spree/admin/shared/error_messages', target: @admin_user %>
20
+ <%= render 'form', f: f %>
21
+ <% if can?(:manage, Spree::Role) && @roles.any? %>
22
+ <div class="form-group">
23
+ <%= f.label :spree_role_ids, Spree.t(:roles) %>
24
+ <%= f.select :spree_role_ids,
25
+ options_from_collection_for_select(@roles, 'id', 'name', @admin_user.spree_roles.pluck(:id)),
26
+ { prompt: false },
27
+ { multiple: true, data: { controller: 'autocomplete-select' } } %>
28
+ </div>
29
+ <% end %>
30
+ </div>
31
+ <div class="card-footer">
32
+ <%= turbo_save_button_tag Spree.t('actions.update') %>
33
+ </div>
34
+ <% end %>
35
+ <% end%>
@@ -0,0 +1,18 @@
1
+ <%= render 'spree/admin/shared/team_nav' %>
2
+
3
+ <div class="card-lg">
4
+ <div class="table-responsive">
5
+ <table class="table">
6
+ <thead>
7
+ <tr>
8
+ <th class="rounded-lg-top-left"><%= Spree.t(:user) %></th>
9
+ <th><%= Spree.t(:roles) %></th>
10
+ <th class="rounded-lg-top-right"><%= sort_link @search, :created_at, Spree.t(:created_at) %></th>
11
+ </tr>
12
+ </thead>
13
+ <tbody>
14
+ <%= render partial: 'spree/admin/admin_users/admin_user', collection: @collection %>
15
+ </tbody>
16
+ </table>
17
+ </div>
18
+ </div>
@@ -0,0 +1,21 @@
1
+ <%= form_with model: @admin_user, url: spree.admin_admin_users_path(token: @invitation.token), method: :post, scope: :admin_user do |f| %>
2
+ <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @admin_user } %>
3
+
4
+ <div class="rounded border p-3 mb-3 d-flex align-items-center gap-2">
5
+ <%= render_avatar(@invitation.inviter, height: 32, width: 32) %>
6
+ <%= @invitation.inviter.name %> has invited you to join <strong><%= @invitation.resource.name %></strong>
7
+ </div>
8
+
9
+ <%= render 'form', f: f %>
10
+ <div class="form-group">
11
+ <%= f.label :password %>
12
+ <%= f.password_field :password, class: 'form-control', required: true %>
13
+ </div>
14
+ <div class="form-group">
15
+ <%= f.label :password_confirmation %>
16
+ <%= f.password_field :password_confirmation, class: 'form-control', required: true %>
17
+ </div>
18
+
19
+ <%= turbo_save_button_tag(Spree.t('create_a_new_account')) %>
20
+ <% end %>
21
+
@@ -0,0 +1,113 @@
1
+ <% content_for :page_title do %>
2
+ <%= page_header_back_button spree.admin_admin_users_path, @admin_user %>
3
+ <%= @admin_user.name %>
4
+ <% end %>
5
+
6
+ <%= content_for :title do %>
7
+ <%= @admin_user.name %>
8
+ <% end %>
9
+
10
+ <div class="row">
11
+ <div class="col-lg-8">
12
+ <div class="card mb-4">
13
+ <div class="card-header">
14
+ <h5 class="card-title">
15
+ <%= icon 'history', class: 'mr-1' %>
16
+ <%= Spree.t(:audit_log) %>
17
+ </h5>
18
+ </div>
19
+ <div class="card-body">
20
+ <%= render 'audit_log' %>
21
+ </div>
22
+ </div>
23
+ </div>
24
+
25
+ <div class="col-lg-4">
26
+ <div class="card mb-4" id="user-details">
27
+ <%= turbo_frame_tag :edit_user do %>
28
+ <div class="card-header d-flex align-items-center justify-content-between">
29
+ <h5 class="card-title">
30
+ <%= Spree.t(:details) %>
31
+ </h5>
32
+ <%= link_to_with_icon 'edit', Spree.t(:edit), spree.edit_admin_admin_user_path(@admin_user), class: 'btn btn-light btn-sm', data: { turbo_frame: :edit_user } %>
33
+ </div>
34
+ <div class="card-body p-0">
35
+ <ul class="list-group list-group-flush">
36
+ <li class="list-group-item d-flex justify-content-between align-items-center">
37
+ <%= Spree.t(:email) %>
38
+ <span>
39
+ <%= @admin_user.email %>
40
+ </span>
41
+ </li>
42
+ <li class="list-group-item d-flex justify-content-between align-items-center">
43
+ <%= Spree.t(:name) %>
44
+ <span>
45
+ <%= @admin_user.name %>
46
+ </span>
47
+ </li>
48
+ <li class="list-group-item d-flex justify-content-between align-items-center">
49
+ <%= Spree.t(:roles) %>
50
+ <span>
51
+ <% @role_users.each do |role_user| %>
52
+ <span class="badge badge-light"><%= role_user.role.name %></span>
53
+ <% end %>
54
+ </span>
55
+ </li>
56
+ <% if @admin_user.respond_to?(:sign_in_count) %>
57
+ <li class="list-group-item d-flex justify-content-between align-items-center">
58
+ <%= I18n.t('activerecord.attributes.user.sign_in_count') %>
59
+ <span>
60
+ <%= @admin_user.sign_in_count %>
61
+ </span>
62
+ </li>
63
+ <% end %>
64
+ <% if @admin_user.respond_to?(:last_sign_in_at) %>
65
+ <li class="list-group-item d-flex justify-content-between align-items-center">
66
+ <%= I18n.t('activerecord.attributes.user.last_sign_in') %>
67
+ <span>
68
+ <% if @admin_user.last_sign_in_at %>
69
+ <%= local_time(@admin_user.last_sign_in_at) %>
70
+ <% else %>
71
+ <%= Spree.t(:not_available) %>
72
+ <% end %>
73
+ </span>
74
+ </li>
75
+ <% end %>
76
+ <% if @admin_user.respond_to?(:current_sign_in_at) %>
77
+ <li class="list-group-item d-flex justify-content-between align-items-center">
78
+ <%= I18n.t('activerecord.attributes.user.current_sign_in') %>
79
+ <span>
80
+ <% if @admin_user.current_sign_in_at %>
81
+ <%= local_time(@admin_user.current_sign_in_at) %>
82
+ <% else %>
83
+ <%= Spree.t(:not_available) %>
84
+ <% end %>
85
+ </span>
86
+ </li>
87
+ <% end %>
88
+ <li class="list-group-item d-flex justify-content-between align-items-center">
89
+ <%= Spree.t(:created_at) %>
90
+ <span>
91
+ <%= local_time(@admin_user.created_at) %>
92
+ </span>
93
+ </li>
94
+ <li class="list-group-item d-flex justify-content-between align-items-center">
95
+ <%= Spree.t(:updated_at) %>
96
+ <span>
97
+ <%= local_time(@admin_user.updated_at) %>
98
+ </span>
99
+ </li>
100
+ <% if @admin_user.invited_by %>
101
+ <li class="list-group-item d-flex justify-content-between align-items-center">
102
+ <%= Spree.t(:invited_by) %>
103
+ <span>
104
+ <%= @admin_user.invited_by.name %>
105
+ </span>
106
+ </li>
107
+ <% end %>
108
+ </ul>
109
+ </div>
110
+ <% end %>
111
+ </div>
112
+ </div>
113
+ </div>
@@ -8,8 +8,8 @@
8
8
  <%= render 'spree/admin/shared/filters_search_bar', param: :code_eq %>
9
9
 
10
10
  <div class="d-flex align-items-center justify-content-between">
11
- <div class="dropdown h-100">
12
- <button class="btn btn-light h-100 dropdown-toggle" type="button" data-toggle="dropdown" data-display="static" data-flip="false" aria-expanded="false">
11
+ <div class="dropdown">
12
+ <button class="btn btn-light dropdown-toggle" type="button" data-toggle="dropdown" data-display="static" data-flip="false" aria-expanded="false">
13
13
  <span class="text-muted font-weight-normal mr-1">
14
14
  <%= Spree.t(:show) %>
15
15
  </span>
@@ -19,14 +19,14 @@
19
19
  </button>
20
20
  <div class="dropdown-menu w-100 font-size-sm" style="min-width: 200px">
21
21
  <%= active_link_to Spree.t(:all),
22
- spree.admin_promotion_coupon_codes_path,
22
+ spree.admin_promotion_coupon_codes_path(@promotion),
23
23
  class: 'dropdown-item',
24
24
  active: (params[:q] || {}).values_at(:state_eq).all?(&:blank?) %>
25
25
  <%= link_to Spree.t('admin.coupon_codes.used'),
26
- params.merge({q: {state_eq: :used}}).permit!,
26
+ spree.admin_promotion_coupon_codes_path(@promotion, q: {state_eq: :used}),
27
27
  class: "dropdown-item #{'active' if params.dig(:q, :state_eq) == 'used'}" %>
28
28
  <%= link_to Spree.t('admin.coupon_codes.unused'),
29
- params.merge({q: {state_eq: :unused}}).permit!,
29
+ spree.admin_promotion_coupon_codes_path(@promotion, q: {state_eq: :unused}),
30
30
  class: "dropdown-item #{'active' if params.dig(:q, :state_eq) == 'unused'}" %>
31
31
  </div>
32
32
  </div>
@@ -42,7 +42,7 @@
42
42
  <div class="table-responsive">
43
43
  <% if @coupon_codes.any? %>
44
44
  <table class="table">
45
- <thead class="text-muted">
45
+ <thead>
46
46
  <tr data-hook="rate_header">
47
47
  <th><%= Spree.t(:code) %></th>
48
48
  <th><%= Spree.t(:used) %></th>
@@ -1,7 +1,7 @@
1
1
  <% if current_store.custom_domains.any? %>
2
2
  <div class="table-responsive rounded mt-3 border">
3
3
  <table class="table">
4
- <thead class="text-muted">
4
+ <thead>
5
5
  <tr>
6
6
  <th><%= Spree.t(:name) %></th>
7
7
  <th>Active?</th>
@@ -20,7 +20,7 @@
20
20
  <% if @collection.any? %>
21
21
  <div class="table-responsive">
22
22
  <table class="table">
23
- <thead class="text-muted">
23
+ <thead>
24
24
  <tr data-hook="rate_header">
25
25
  <th><%= Spree.t(:number) %></th>
26
26
  <th><%= Spree.t(:created_at) %></th>
@@ -1,5 +1,5 @@
1
1
  <% if current_store.default_theme %>
2
- <div class="card mb-4 bg-transparent">
2
+ <div class="card mb-4">
3
3
  <%= link_to spree.edit_admin_theme_path(current_store.default_theme), class: 'd-block border rounded mx-2 mt-2 mb-0 overflow-auto bg-light position-relative store-preview-link' do %>
4
4
  <div class="position-absolute w-100 h-100 align-items-center justify-content-center overlay-background store-preview-actions">
5
5
  <button class="btn btn-primary">
@@ -5,7 +5,9 @@
5
5
  <h5 class="card-title">
6
6
  <%= Spree.t('admin.dashboard.top_products') %>
7
7
  </h5>
8
- <%= link_to Spree.t('admin.dashboard.view_report'), report_link, class: 'btn btn-light btn-sm', data: { turbo_frame: '_top' } %>
8
+ <% if can?(:manage, Spree::Report) %>
9
+ <%= link_to Spree.t('admin.dashboard.view_report'), report_link, class: 'btn btn-light btn-sm', data: { turbo_frame: '_top' } %>
10
+ <% end %>
9
11
  </div>
10
12
  <div class="card-body m-0 p-0">
11
13
  <div class="table-responsive">
@@ -45,7 +47,7 @@
45
47
  <%= product.name %>
46
48
  <% end %>
47
49
  </td>
48
- <% if enterprise_edition? && defined?(vendor_logo_link) && !@vendor %>
50
+ <% if defined?(vendor_logo_link) && !@vendor %>
49
51
  <td>
50
52
  <%= vendor_logo_link(product.vendor) if product.vendor.present? %>
51
53
  </td>
@@ -72,7 +74,7 @@
72
74
  </tbody>
73
75
  </table>
74
76
  </div>
75
- <% if @top_products.any? %>
77
+ <% if @top_products.any? && can?(:manage, Spree::Report) %>
76
78
  <p class="text-center mt-0 border-top py-2 mb-0">
77
79
  <%= link_to Spree.t('admin.dashboard.view_report'), report_link, class: 'm-2 w-50 btn btn-light mt-2', data: { turbo_frame: '_top' } %>
78
80
  </p>
@@ -1,5 +1,5 @@
1
1
  <table class="table">
2
- <thead class="text-muted">
2
+ <thead>
3
3
  <tr>
4
4
  <% if @product.has_variants? %>
5
5
  <th><%= Spree.t(:variant) %></th>
@@ -1,6 +1,5 @@
1
1
  <% content_for :page_title do %>
2
2
  <%= page_header_back_button spree.admin_product_path(@product) %>
3
- <span class="mr-3"><%= @product.name %></span>
4
3
  <span><%= Spree.t("digital_assets") %></span>
5
4
  <% end %>
6
5
 
@@ -4,7 +4,7 @@
4
4
  <% if @collection.any? %>
5
5
  <div class="table-responsive">
6
6
  <table class="table">
7
- <thead class="text-muted">
7
+ <thead>
8
8
  <tr>
9
9
  <th><%= Spree.t(:number) %></th>
10
10
  <th class="text-center"><%= Spree.t(:kind) %></th>
@@ -0,0 +1,36 @@
1
+ <% integration_name = integration_class.integration_name %>
2
+ <% integration = store_integration(integration_class.integration_key) %>
3
+
4
+ <% integration_description ||= Spree.t("admin.integrations.#{integration_class.integration_key}.description") %>
5
+
6
+ <div id="integration-<%= integration_class.integration_key %>" class="col mb-4 d-flex align-items-stretch">
7
+ <div class="card w-full">
8
+ <div class="card-header border-bottom d-flex align-items-center justify-content-between h-auto pr-3 <% if integration.present? %>bg-success<% end %>">
9
+ <div style="height: 36px" class="d-flex align-items-center">
10
+ <%= image_tag integration_class.icon_path, alt: integration_name, height: 36 if integration_class.icon_path.present? %>
11
+ </div>
12
+
13
+ <% if integration.present? %>
14
+ <span class="badge badge-success small">
15
+ <%= icon('check', class: 'mr-1') %>
16
+ <%= Spree.t(:active) %>
17
+ </span>
18
+ <% end %>
19
+ </div>
20
+
21
+ <div class="card-body">
22
+ <p><%= integration_description %></p>
23
+ </div>
24
+
25
+ <div class="card-footer d-flex <% if integration.present? %>align-items-baseline justify-content-between<% else %>flex-column<% end %>">
26
+ <% if integration.present? %>
27
+ <%= link_to spree.edit_admin_integration_path(integration), class: 'card-link btn btn-sm btn-light' do %>
28
+ <%= icon 'settings' %>
29
+ <%= Spree.t(:settings) %>
30
+ <% end if can?(:update, integration) %>
31
+ <% else %>
32
+ <%= link_to_with_icon 'plus', "#{Spree.t('actions.connect')} #{integration_class.integration_name}", spree.new_admin_integration_path(integration: { type: integration_class.name }), class: 'btn btn-primary' if can?(:create, Spree::Integration) %>
33
+ <% end %>
34
+ </div>
35
+ </div>
36
+ </div>
@@ -0,0 +1,11 @@
1
+ <% content_for :page_title do %>
2
+ <%= page_header_back_button spree.admin_integrations_path %>
3
+ <%= @integration.name %> <%= Spree.t(:settings) %>
4
+ <% end %>
5
+
6
+ <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @integration } %>
7
+
8
+ <%= form_for @integration, as: :integration, url: spree.admin_integration_path(@integration) do |form| %>
9
+ <%= render "spree/admin/integrations/forms/#{@integration.key}", form: form %>
10
+ <%= render 'spree/admin/shared/edit_resource_links', f: form %>
11
+ <% end %>
@@ -0,0 +1,23 @@
1
+ <%= content_for(:page_title) do %>
2
+ <%= Spree.t(:integrations) %>
3
+ <% end %>
4
+
5
+ <%= content_for(:page_alerts) do %>
6
+ <div class="alert alert-info">
7
+ <%= Spree.t('admin.integrations.page_subtitle') %>
8
+ </div>
9
+ <% end %>
10
+
11
+ <div class="container px-lg-0 mt-2">
12
+ <% grouped_available_store_integrations.each do |group, integrations| %>
13
+ <% if group.present? %>
14
+ <div class="my-2 text-muted font-weight-light text-uppercase"><%= Spree.t(group) %></div>
15
+ <% end %>
16
+
17
+ <div class="row row-cols-1 row-cols-md-2 row-cols-lg-4 mb-4">
18
+ <% integrations.each do |integration| %>
19
+ <%= render 'spree/admin/integrations/integration', integration_class: integration %>
20
+ <% end %>
21
+ </div>
22
+ <% end %>
23
+ </div>
@@ -0,0 +1,14 @@
1
+ <% content_for :page_title do %>
2
+ <%= page_header_back_button spree.admin_integrations_path %>
3
+ <%= Spree.t('actions.connect') %> <%= @integration.name %>
4
+ <% end %>
5
+
6
+ <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @integration } %>
7
+
8
+ <%= form_for @integration, as: :integration, url: spree.admin_integrations_path do |form| %>
9
+ <%= form.hidden_field :type %>
10
+ <%= form.hidden_field :active, value: true %>
11
+
12
+ <%= render "spree/admin/integrations/forms/#{@integration.key}", form: form %>
13
+ <%= render 'spree/admin/shared/new_resource_links' %>
14
+ <% end %>
@@ -0,0 +1,52 @@
1
+ <tr id="<%= spree_dom_id invitation %>">
2
+ <td class="w-30">
3
+ <%= invitation.email %>
4
+ </td>
5
+ <td class="w-10">
6
+ <% if can?(:read, invitation.inviter) %>
7
+ <%= link_to invitation.inviter.name, spree.admin_admin_user_path(invitation.inviter) %>
8
+ <% else %>
9
+ <%= invitation.inviter.name %>
10
+ <% end %>
11
+ </td>
12
+ <td class="w-20">
13
+ <span class="badge badge-light"><%= invitation.role.name %></span>
14
+ </td>
15
+ <td class="w-20">
16
+ <% if invitation.accepted? %>
17
+ <span class="badge badge-success"><%= Spree.t(:accepted) %></span>
18
+ <% elsif invitation.deleted? %>
19
+ <span class="badge badge-danger"><%= Spree.t(:deleted) %></span>
20
+ <% elsif invitation.expired? %>
21
+ <span class="badge badge-warning"><%= Spree.t(:expired) %></span>
22
+ <% else %>
23
+ <span class="badge badge-light"><%= Spree.t(:pending) %></span>
24
+ <p class="text-muted font-size-sm mb-0 mt-2 pl-1">Expires at: <%= local_time(invitation.expires_at) %></p>
25
+ <% end %>
26
+ </td>
27
+ <td class="w-10">
28
+ <%= local_time(invitation.created_at) %>
29
+ </td>
30
+ <td class="w-10 actions">
31
+ <% if invitation.pending? && !invitation.expired? %>
32
+ <div class="dropdown" data-controller="clipboard">
33
+ <%= hidden_field_tag nil, spree.admin_invitation_url(invitation, token: invitation.token), data: { clipboard_target: "source" } %>
34
+
35
+ <button class="btn btn-sm btn-light" type="button" id="dropdownMenuButton-<%= invitation.id %>" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
36
+ <%= icon('dots-vertical', class: 'mr-0') %>
37
+ </button>
38
+ <div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenuButton-<%= invitation.id %>">
39
+ <%= link_to_with_icon 'copy', Spree.t(:copy_link), '#',
40
+ class: "dropdown-item",
41
+ data: { action: "clipboard#copy" } %>
42
+ <%= link_to_with_icon 'send', Spree.t('actions.resend'), spree.resend_admin_invitation_path(invitation),
43
+ class: "dropdown-item",
44
+ data: { turbo_method: :put, turbo_confirm: Spree.t(:are_you_sure) } %>
45
+ <%= link_to_with_icon 'trash', Spree.t('actions.destroy'), spree.admin_invitation_path(invitation),
46
+ class: "dropdown-item btn-danger",
47
+ data: { turbo_method: :delete, turbo_confirm: Spree.t(:are_you_sure) } if can?(:destroy, invitation) %>
48
+ </div>
49
+ </div>
50
+ <% end %>
51
+ </td>
52
+ </tr>
@@ -0,0 +1,4 @@
1
+ <%= turbo_render_alerts %>
2
+ <%= turbo_close_modal %>
3
+
4
+ <%= turbo_stream.prepend 'invitations', partial: 'spree/admin/invitations/invitation', locals: { invitation: @invitation } %>
@@ -0,0 +1,21 @@
1
+ <%= render 'spree/admin/shared/team_nav' %>
2
+
3
+ <div class="card-lg">
4
+ <div class="table-responsive">
5
+ <table class="table">
6
+ <thead>
7
+ <tr>
8
+ <th class="rounded-lg-top-left"><%= Spree.t(:email) %></th>
9
+ <th><%= I18n.t('activerecord.attributes.spree/invitation.inviter') %></th>
10
+ <th><%= Spree.t(:role_id) %></th>
11
+ <th><%= Spree.t(:status) %></th>
12
+ <th class="rounded-lg-top-right"><%= sort_link @search, :created_at, Spree.t(:created_at) %></th>
13
+ <th></th>
14
+ </tr>
15
+ </thead>
16
+ <tbody id="invitations">
17
+ <%= render collection: @collection, partial: 'spree/admin/invitations/invitation', as: :invitation %>
18
+ </tbody>
19
+ </table>
20
+ </div>
21
+ </div>
@@ -0,0 +1,32 @@
1
+ <%= turbo_frame_tag :dialog_modal do %>
2
+ <%= form_for @invitation,
3
+ url: spree.admin_invitations_path,
4
+ data: { controller: "enable-button" } do |f| %>
5
+ <div class="modal-content">
6
+ <%= modal_header Spree.t('actions.send_invitation') %>
7
+ <div class="modal-body">
8
+ <%= render 'spree/admin/shared/error_messages', target: @invitation %>
9
+ <div class="form-group">
10
+ <%= f.label :email, Spree.t(:email) %>
11
+ <%= f.email_field :email, class: 'form-control', required: :required, data: { 'enable-button-target': 'input' }, placeholder: 'eg. steve@apple.com', autofocus: true %>
12
+ </div>
13
+ <% if @roles.any? %>
14
+ <div class="form-group">
15
+ <%= f.label :role, Spree.t(:role_id) %>
16
+ <%= f.select :role_id, @roles.map { |role| [role.name, role.id] }, {}, { data: { controller: 'autocomplete-select', 'enable-button-target': 'input' }, required: true } %>
17
+ </div>
18
+ <% end %>
19
+ <div class="form-group">
20
+ <%= f.label :expires_at %>
21
+ <%= f.date_field :expires_at, class: 'form-control', required: true, data: { 'enable-button-target': 'input' } %>
22
+ </div>
23
+ </div>
24
+ <div class="modal-footer">
25
+ <%= turbo_save_button_tag nil, class: 'btn btn-primary', data: { 'enable-button-target': 'button' } do %>
26
+ <%= icon 'send' %>
27
+ <%= Spree.t('actions.send_invitation') %>
28
+ <% end %>
29
+ </div>
30
+ </div>
31
+ <% end %>
32
+ <% end %>
@@ -0,0 +1,9 @@
1
+ <div class="d-flex align-items-center gap-2">
2
+ <div>
3
+ <%= render_avatar(@invitation.inviter, height: 32, width: 32) %>
4
+ </div>
5
+ <div>
6
+ <strong><%= @invitation.inviter.name %></strong> has invited you to join <strong><%= @invitation.resource.name %></strong>
7
+ </div>
8
+ </div>
9
+ <%= link_to Spree.t(:accept), spree.accept_admin_invitation_path(@invitation), class: 'btn btn-primary w-100', data: { turbo_method: :put } %>
@@ -17,8 +17,8 @@
17
17
  </p>
18
18
  </div>
19
19
  </div>
20
- <div class="modal-footer border-top">
21
- <div class="d-flex gap-2 m-0 align-items-center">
20
+ <div class="modal-footer">
21
+ <div class="d-flex gap-2 m-0 align-items-center mr-auto">
22
22
  <%= form.label :quantity, Spree.t(:quantity), class: "mb-0" %>
23
23
  <%= form.number_field :quantity, class: "form-control", min: 1 %>
24
24
  </div>
@@ -19,7 +19,7 @@
19
19
  <% if @collection.any? %>
20
20
  <div class="table-responsive">
21
21
  <table class="table">
22
- <thead class="text-muted">
22
+ <thead>
23
23
  <tr>
24
24
  <th><%= Spree.t(:name) %></th>
25
25
  <th>Client ID</th>
@@ -1,6 +1,6 @@
1
1
  <% content_for :page_title do %>
2
2
  <%= page_header_back_button spree.admin_option_types_url %>
3
- <%= @option_type.name %>
3
+ <%= @option_type.presentation %>
4
4
  <% end %>
5
5
 
6
6
  <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @option_type } %>
@@ -18,7 +18,7 @@
18
18
  <% if @option_types.any? %>
19
19
  <div class="table-responsive">
20
20
  <table class="table" id="listing_option_types">
21
- <thead class="text-muted">
21
+ <thead>
22
22
  <tr>
23
23
  <th class="no-border handel-head"></th>
24
24
  <th><%= Spree.t(:internal_name) %></th>