spree_backend 4.3.0 → 4.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (263) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +222 -0
  3. data/.codeclimate.yml +36 -0
  4. data/.editorconfig +22 -0
  5. data/.eslintignore +7 -0
  6. data/.eslintrc.cjs +29 -0
  7. data/.gem_release.yml +4 -0
  8. data/.github/CONTRIBUTING.md +1 -0
  9. data/.github/ISSUE_TEMPLATE/bug_report.md +47 -0
  10. data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  11. data/.github/ISSUE_TEMPLATE.md +39 -0
  12. data/.github/dependabot.yml +7 -0
  13. data/.github/workflows/spelling_lint.yml +34 -0
  14. data/.gitignore +64 -0
  15. data/.rubocop.yml +197 -0
  16. data/.solargraph.yml +20 -0
  17. data/.stylelintignore +4 -0
  18. data/.stylelintrc +6 -0
  19. data/CODE_OF_CONDUCT.md +22 -0
  20. data/Gemfile +59 -3
  21. data/README.md +123 -0
  22. data/SECURITY.md +1 -0
  23. data/app/assets/config/spree_backend_manifest.js +1 -1
  24. data/app/assets/images/backend-cloud-arrow-up.svg +4 -0
  25. data/app/assets/images/backend-eye-open.svg +1 -1
  26. data/app/assets/images/backend-file-earmark-font.svg +4 -0
  27. data/app/assets/images/backend-file-earmark-image.svg +4 -0
  28. data/app/assets/images/backend-file-earmark-music.svg +4 -0
  29. data/app/assets/images/backend-file-earmark-pdf.svg +4 -0
  30. data/app/assets/images/backend-file-earmark-play.svg +4 -0
  31. data/app/assets/images/backend-file-earmark-spreadsheet.svg +3 -0
  32. data/app/assets/images/backend-file-earmark-zip.svg +4 -0
  33. data/app/assets/images/backend-file-earmark.svg +3 -0
  34. data/app/assets/images/backend-hdd.svg +4 -0
  35. data/app/assets/images/backend-link.svg +4 -0
  36. data/app/assets/images/backend-view.svg +1 -1
  37. data/app/assets/javascripts/spree/backend/address_states.es6 +2 -0
  38. data/app/assets/javascripts/spree/backend/adjustments.js +5 -5
  39. data/app/assets/javascripts/spree/backend/admin.js +4 -6
  40. data/app/assets/javascripts/spree/backend/calculator.js +1 -1
  41. data/app/assets/javascripts/spree/backend/checkouts/edit.js +1 -1
  42. data/app/assets/javascripts/spree/backend/cms/links.es6 +1 -1
  43. data/app/assets/javascripts/spree/backend/cms/live_preview.es6 +1 -1
  44. data/app/assets/javascripts/spree/backend/cms/page.es6 +22 -40
  45. data/app/assets/javascripts/spree/backend/cms/section.es6 +1 -1
  46. data/app/assets/javascripts/spree/backend/gateway.js +1 -1
  47. data/app/assets/javascripts/spree/backend/general_settings.js +1 -1
  48. data/app/assets/javascripts/spree/backend/global/_index.js +3 -1
  49. data/app/assets/javascripts/spree/backend/global/alerts.es6 +1 -1
  50. data/app/assets/javascripts/spree/backend/global/animate_css.es6 +19 -0
  51. data/app/assets/javascripts/spree/backend/global/fetch_request_utility.es6 +114 -0
  52. data/app/assets/javascripts/spree/backend/global/flatpickr.es6 +8 -1
  53. data/app/assets/javascripts/spree/backend/global/info_alert.es6 +1 -1
  54. data/app/assets/javascripts/spree/backend/global/radio_panel_toggle.es6 +1 -1
  55. data/app/assets/javascripts/spree/backend/global/ransack.es6 +7 -5
  56. data/app/assets/javascripts/spree/backend/global/responsive_menus.es6 +1 -1
  57. data/app/assets/javascripts/spree/backend/global/select2_autocomplete.es6 +11 -4
  58. data/app/assets/javascripts/spree/backend/global/select2_populate.es6 +2 -2
  59. data/app/assets/javascripts/spree/backend/global/side_scroll_indication.es6 +2 -2
  60. data/app/assets/javascripts/spree/backend/global/sortable.es6 +1 -1
  61. data/app/assets/javascripts/spree/backend/global/tinymce.es6 +3 -2
  62. data/app/assets/javascripts/spree/backend/line_items.js +7 -9
  63. data/app/assets/javascripts/spree/backend/line_items_on_order_edit.js +23 -28
  64. data/app/assets/javascripts/spree/backend/menus/_index.es6 +0 -1
  65. data/app/assets/javascripts/spree/backend/menus/menu_item.es6 +1 -1
  66. data/app/assets/javascripts/spree/backend/multi_currency.js +2 -2
  67. data/app/assets/javascripts/spree/backend/option_type_autocomplete.js +1 -1
  68. data/app/assets/javascripts/spree/backend/orders/edit.js +1 -1
  69. data/app/assets/javascripts/spree/backend/payments/edit.js +32 -22
  70. data/app/assets/javascripts/spree/backend/payments/new.js +1 -1
  71. data/app/assets/javascripts/spree/backend/product_picker.js +16 -25
  72. data/app/assets/javascripts/spree/backend/progress.js +5 -3
  73. data/app/assets/javascripts/spree/backend/promotions.js +3 -1
  74. data/app/assets/javascripts/spree/backend/returns/expedited_exchanges_warning.js +1 -1
  75. data/app/assets/javascripts/spree/backend/returns/return_item_selection.js +1 -1
  76. data/app/assets/javascripts/spree/backend/shipments.js +80 -79
  77. data/app/assets/javascripts/spree/backend/spree-select2.js +8 -1
  78. data/app/assets/javascripts/spree/backend/states.js +1 -1
  79. data/app/assets/javascripts/spree/backend/stock_location.js +1 -1
  80. data/app/assets/javascripts/spree/backend/stock_management.js +1 -1
  81. data/app/assets/javascripts/spree/backend/stock_movement.js +58 -13
  82. data/app/assets/javascripts/spree/backend/stock_transfer.js +62 -32
  83. data/app/assets/javascripts/spree/backend/taxon_autocomplete.js +9 -8
  84. data/app/assets/javascripts/spree/backend/taxons.js +17 -14
  85. data/app/assets/javascripts/spree/backend/user_picker.js +1 -1
  86. data/app/assets/javascripts/spree/backend/users/edit.js +1 -1
  87. data/app/assets/javascripts/spree/backend/variant_autocomplete.js +19 -11
  88. data/app/assets/javascripts/spree/backend/variant_management.js +1 -1
  89. data/app/assets/javascripts/spree/backend/zone.js +1 -1
  90. data/app/assets/javascripts/spree/backend.js +13 -33
  91. data/app/assets/javascripts/spree.js +2 -9
  92. data/app/assets/stylesheets/spree/backend/components/_main.scss +8 -0
  93. data/app/assets/stylesheets/spree/backend/plugins/_nav_x.scss +1 -1
  94. data/app/assets/stylesheets/spree/backend/plugins/_select2_custom.scss +1 -1
  95. data/app/assets/stylesheets/spree/backend/shared/_forms.scss +1 -1
  96. data/app/assets/stylesheets/spree/backend/shared/_sortable_tree.scss +62 -0
  97. data/app/assets/stylesheets/spree/backend/spree_admin.css.scss +3 -0
  98. data/app/assets/stylesheets/spree/backend/views/_digitals.scss +33 -0
  99. data/app/assets/stylesheets/spree/backend/views/{prototypes.scss → _prototypes.scss} +0 -0
  100. data/app/assets/stylesheets/spree/backend/views/_taxonomies.scss +3 -0
  101. data/app/controllers/spree/admin/base_controller.rb +4 -13
  102. data/app/controllers/spree/admin/digitals_controller.rb +33 -0
  103. data/app/controllers/spree/admin/general_settings_controller.rb +0 -5
  104. data/app/controllers/spree/admin/images_controller.rb +1 -1
  105. data/app/controllers/spree/admin/oauth_applications_controller.rb +17 -0
  106. data/app/controllers/spree/admin/orders/customer_details_controller.rb +2 -2
  107. data/app/controllers/spree/admin/orders_controller.rb +10 -2
  108. data/app/controllers/spree/admin/payment_methods_controller.rb +2 -2
  109. data/app/controllers/spree/admin/payments_controller.rb +1 -1
  110. data/app/controllers/spree/admin/products_controller.rb +4 -2
  111. data/app/controllers/spree/admin/promotions_controller.rb +1 -1
  112. data/app/controllers/spree/admin/properties_controller.rb +1 -1
  113. data/app/controllers/spree/admin/resource_controller.rb +9 -4
  114. data/app/controllers/spree/admin/return_index_controller.rb +3 -4
  115. data/app/controllers/spree/admin/stock_transfers_controller.rb +2 -2
  116. data/app/controllers/spree/admin/store_credits_controller.rb +2 -2
  117. data/app/controllers/spree/admin/stores_controller.rb +2 -2
  118. data/app/controllers/spree/admin/taxons_controller.rb +23 -38
  119. data/app/controllers/spree/admin/users_controller.rb +6 -19
  120. data/app/controllers/spree/admin/variants_controller.rb +1 -2
  121. data/app/controllers/spree/admin/webhooks_subscribers_controller.rb +48 -0
  122. data/app/helpers/spree/admin/base_helper.rb +27 -9
  123. data/app/helpers/spree/admin/digital_helper.rb +28 -0
  124. data/app/helpers/spree/admin/menu_helper.rb +0 -21
  125. data/app/helpers/spree/admin/navigation_helper.rb +19 -9
  126. data/app/helpers/spree/admin/sortable_tree_helper.rb +31 -0
  127. data/app/helpers/spree/admin/stores_helper.rb +1 -1
  128. data/app/helpers/spree/admin/webhooks_subscribers_helper.rb +31 -0
  129. data/app/javascript/spree/dashboard/controllers/clipboard_controller.js +12 -0
  130. data/app/javascript/spree/dashboard/controllers/password_toggle_controller.js +14 -0
  131. data/app/javascript/spree/dashboard/controllers/sortable_tree_controller.js +55 -0
  132. data/app/javascript/spree/dashboard/controllers/spree_controller.js +25 -0
  133. data/app/javascript/spree/dashboard/controllers/upload_button_controller.js +13 -0
  134. data/app/javascript/spree/dashboard/controllers/webhooks_subscriber_events_controller.js +19 -0
  135. data/app/javascript/spree/dashboard/index.js +49 -0
  136. data/app/{assets/javascripts/spree/backend/global/bootstrap.es6 → javascript/spree/dashboard/utilities/bootstrap.js} +6 -2
  137. data/app/javascript/spree/dashboard/utilities/request_utility.js +54 -0
  138. data/app/models/spree/backend_configuration.rb +11 -0
  139. data/app/views/spree/admin/adjustments/_form.html.erb +2 -2
  140. data/app/views/spree/admin/adjustments/index.html.erb +1 -0
  141. data/app/views/spree/admin/cms_pages/_form.html.erb +8 -8
  142. data/app/views/spree/admin/cms_pages/edit.html.erb +1 -6
  143. data/app/views/spree/admin/cms_sections/_form.html.erb +2 -2
  144. data/app/views/spree/admin/cms_sections/types/_featured_article.html.erb +6 -6
  145. data/app/views/spree/admin/cms_sections/types/_hero_image.html.erb +6 -6
  146. data/app/views/spree/admin/cms_sections/types/_image_gallery.html.erb +12 -12
  147. data/app/views/spree/admin/cms_sections/types/_rich_text_content.html.erb +1 -1
  148. data/app/views/spree/admin/cms_sections/types/_side_by_side_images.html.erb +12 -12
  149. data/app/views/spree/admin/countries/_form.html.erb +4 -4
  150. data/app/views/spree/admin/customer_returns/new.html.erb +1 -1
  151. data/app/views/spree/admin/digitals/_form.html.erb +35 -0
  152. data/app/views/spree/admin/digitals/index.html.erb +25 -0
  153. data/app/views/spree/admin/general_settings/edit.html.erb +1 -22
  154. data/app/views/spree/admin/menu_items/_form.html.erb +6 -6
  155. data/app/views/spree/admin/menus/_form.html.erb +3 -3
  156. data/app/views/spree/admin/menus/edit.html.erb +18 -18
  157. data/app/views/spree/admin/oauth_applications/_form.html.erb +22 -0
  158. data/app/views/spree/admin/oauth_applications/create.turbo_stream.erb +38 -0
  159. data/app/views/spree/admin/oauth_applications/edit.html.erb +13 -0
  160. data/app/views/spree/admin/oauth_applications/index.html.erb +51 -0
  161. data/app/views/spree/admin/oauth_applications/new.html.erb +15 -0
  162. data/app/views/spree/admin/option_types/_form.html.erb +3 -3
  163. data/app/views/spree/admin/option_types/_option_value_fields.html.erb +2 -2
  164. data/app/views/spree/admin/orders/_channel_form.html.erb +1 -1
  165. data/app/views/spree/admin/orders/_form.html.erb +1 -0
  166. data/app/views/spree/admin/orders/_line_items_edit_form.html.erb +1 -0
  167. data/app/views/spree/admin/orders/_order_actions.html.erb +6 -0
  168. data/app/views/spree/admin/orders/_search.html.erb +151 -0
  169. data/app/views/spree/admin/orders/index.html.erb +2 -151
  170. data/app/views/spree/admin/payment_methods/_form.html.erb +2 -2
  171. data/app/views/spree/admin/payments/_list.html.erb +1 -1
  172. data/app/views/spree/admin/products/_form.html.erb +19 -20
  173. data/app/views/spree/admin/products/index.html.erb +2 -1
  174. data/app/views/spree/admin/products/new.html.erb +6 -6
  175. data/app/views/spree/admin/promotion_actions/create.js.erb +1 -1
  176. data/app/views/spree/admin/promotion_categories/_form.html.erb +2 -2
  177. data/app/views/spree/admin/promotions/_form.html.erb +5 -5
  178. data/app/views/spree/admin/properties/_form.html.erb +3 -3
  179. data/app/views/spree/admin/prototypes/_form.html.erb +4 -4
  180. data/app/views/spree/admin/refunds/new.html.erb +2 -2
  181. data/app/views/spree/admin/reimbursement_types/_form.html.erb +2 -2
  182. data/app/views/spree/admin/return_authorizations/_form.html.erb +3 -3
  183. data/app/views/spree/admin/roles/_form.html.erb +1 -1
  184. data/app/views/spree/admin/shared/_account_nav.html.erb +1 -1
  185. data/app/views/spree/admin/shared/_address_form.html.erb +4 -4
  186. data/app/views/spree/admin/shared/_head.html.erb +4 -8
  187. data/app/views/spree/admin/shared/_main_menu.html.erb +12 -0
  188. data/app/views/spree/admin/shared/_new_resource_links.html.erb +1 -1
  189. data/app/views/spree/admin/shared/_product_tabs.html.erb +8 -0
  190. data/app/views/spree/admin/shared/_version.html.erb +1 -1
  191. data/app/views/spree/admin/shared/cms/_spree_product.html.erb +2 -2
  192. data/app/views/spree/admin/shared/cms/_spree_taxon.html.erb +2 -2
  193. data/app/views/spree/admin/shared/linkables/_spree_cms_page.erb +2 -2
  194. data/app/views/spree/admin/shared/linkables/_spree_product.html.erb +2 -2
  195. data/app/views/spree/admin/shared/linkables/_spree_taxon.html.erb +2 -2
  196. data/app/views/spree/admin/shared/linkables/_url.html.erb +1 -1
  197. data/app/views/spree/admin/shared/named_types/_form.html.erb +1 -1
  198. data/app/views/spree/admin/{menus/nested_menu_items/_item_bar.html.erb → shared/sortable_tree/_menu.html.erb} +10 -7
  199. data/app/views/spree/admin/shared/sortable_tree/_taxonomy.html.erb +34 -0
  200. data/app/views/spree/admin/shared/sub_menu/_apps.html.erb +3 -0
  201. data/app/views/spree/admin/shared/sub_menu/_integrations.html.erb +3 -0
  202. data/app/views/spree/admin/shipping_categories/_form.html.erb +1 -1
  203. data/app/views/spree/admin/shipping_methods/_form.html.erb +8 -8
  204. data/app/views/spree/admin/states/_form.html.erb +2 -2
  205. data/app/views/spree/admin/stock_locations/_form.html.erb +2 -2
  206. data/app/views/spree/admin/stock_movements/_form.html.erb +3 -3
  207. data/app/views/spree/admin/store_credit_categories/_form.html.erb +1 -1
  208. data/app/views/spree/admin/store_credits/_form.html.erb +4 -4
  209. data/app/views/spree/admin/stores/_form.html.erb +280 -227
  210. data/app/views/spree/admin/tax_categories/_form.html.erb +4 -4
  211. data/app/views/spree/admin/tax_rates/_form.html.erb +4 -3
  212. data/app/views/spree/admin/taxonomies/_form.html.erb +2 -2
  213. data/app/views/spree/admin/taxonomies/edit.html.erb +34 -29
  214. data/app/views/spree/admin/taxons/_form.html.erb +101 -57
  215. data/app/views/spree/admin/taxons/edit.html.erb +6 -3
  216. data/app/views/spree/admin/taxons/index.html.erb +1 -1
  217. data/app/views/spree/admin/taxons/new.html.erb +16 -0
  218. data/app/views/spree/admin/users/_form.html.erb +3 -3
  219. data/app/views/spree/admin/users/edit.html.erb +0 -40
  220. data/app/views/spree/admin/variants/_autocomplete.js.erb +5 -5
  221. data/app/views/spree/admin/variants/_autocomplete_line_items_stock.js.erb +2 -2
  222. data/app/views/spree/admin/variants/_autocomplete_stock.js.erb +6 -6
  223. data/app/views/spree/admin/variants/_split.js.erb +1 -1
  224. data/app/views/spree/admin/variants/index.html.erb +4 -1
  225. data/app/views/spree/admin/webhooks_subscribers/_form.html.erb +101 -0
  226. data/app/views/spree/admin/webhooks_subscribers/edit.html.erb +13 -0
  227. data/app/views/spree/admin/webhooks_subscribers/index.html.erb +47 -0
  228. data/app/views/spree/admin/webhooks_subscribers/new.html.erb +13 -0
  229. data/app/views/spree/admin/webhooks_subscribers/show.html.erb +59 -0
  230. data/app/views/spree/admin/zones/_country_members.html.erb +1 -1
  231. data/app/views/spree/admin/zones/_form.html.erb +2 -2
  232. data/app/views/spree/admin/zones/_state_members.html.erb +1 -1
  233. data/app/views/spree/layouts/admin.html.erb +1 -11
  234. data/codespell.txt +8 -0
  235. data/config/locales/en.yml +273 -0
  236. data/config/routes.rb +6 -2
  237. data/lib/generators/spree/backend/install/install_generator.rb +4 -2
  238. data/lib/generators/spree/backend/install/templates/app/javascript/spree-dashboard.js +7 -0
  239. data/lib/spree/backend/engine.rb +2 -1
  240. data/lib/spree/backend/testing_support/capybara_utils.rb +53 -0
  241. data/lib/spree/backend/testing_support/flash.rb +38 -0
  242. data/lib/spree/backend/testing_support/flatpickr_capybara.rb +126 -0
  243. data/lib/spree/backend/version.rb +9 -0
  244. data/lib/spree/backend.rb +2 -1
  245. data/lib/spree_backend.rb +17 -0
  246. data/license.md +13 -0
  247. data/package.json +45 -0
  248. data/rollup.config.js +41 -0
  249. data/spree_backend.gemspec +17 -16
  250. data/vendor/assets/javascripts/purify.js +1 -1
  251. data/vendor/assets/stylesheets/animate.css +2 -4
  252. data/yarn.lock +944 -0
  253. metadata +118 -36
  254. data/app/assets/javascripts/spree/backend/menus/menu.es6 +0 -57
  255. data/app/assets/javascripts/spree/backend/taxon_permalink_preview.js +0 -11
  256. data/app/assets/javascripts/spree/backend/taxon_tree_menu.js +0 -35
  257. data/app/assets/javascripts/spree/backend/taxonomy.js +0 -178
  258. data/app/views/spree/admin/taxonomies/_js_head.html.erb +0 -7
  259. data/vendor/assets/javascripts/jquery.jstree/jquery.jstree.js +0 -4564
  260. data/vendor/assets/javascripts/js.cookie.js +0 -163
  261. data/vendor/assets/javascripts/modernizr.js +0 -3
  262. data/vendor/assets/stylesheets/jquery.jstree/themes/spree/style.scss +0 -230
  263. data/vendor/assets/stylesheets/jquery.jstree/themes/spree/throbber.gif +0 -0
@@ -0,0 +1,38 @@
1
+ <%= turbo_stream.replace "new_oauth_application" do %>
2
+ <div data-controller="clipboard" class="mb-3 p-3 col-lg-7">
3
+ <div class="form-group">
4
+ <%= label_tag :client_id, 'Client ID' %>
5
+ <div class="input-group">
6
+ <%= text_area_tag :client_id, @object.uid, class: 'form-control bg-transparent p-0 mt-4 mr-4 border-0', rows: 2, data: { clipboard_target: 'source', action: 'clipboard#copy' }, readonly: true %>
7
+ <div class="input-append">
8
+ <button data-action="clipboard#copy" class="btn m-0 mt-4">
9
+ <%= svg_icon name: 'clone.svg', width: 18, height: 18 %>
10
+ <%= Spree.t(:copy_to_clipboard, scope: :admin ) %>
11
+ </button>
12
+ </div>
13
+ </div>
14
+ </div>
15
+ </div>
16
+
17
+ <div data-controller="clipboard" class="mb-3 p-3 col-lg-7">
18
+ <div class="form-group">
19
+ <%= label_tag :client_secret, 'Client Secret' %>
20
+ <div class="input-group">
21
+ <%= text_area_tag :client_secret, @object.plaintext_secret, class: 'form-control bg-transparent p-0 mt-4 mr-4 border-0', rows: 2, data: { clipboard_target: 'source', action: 'clipboard#copy' }, readonly: true %>
22
+ <div class="input-append">
23
+ <button data-action="clipboard#copy" class="btn m-0 mt-4">
24
+ <%= svg_icon name: 'clone.svg', width: 18, height: 18 %>
25
+ <%= Spree.t(:copy_to_clipboard, scope: :admin ) %>
26
+ </button>
27
+ </div>
28
+ </div>
29
+ <small class="form-text text-muted mt-4">
30
+ This is your application's secret token, copy it now and keep it safe. It won't be shown again.
31
+ </small>
32
+ </div>
33
+ </div>
34
+
35
+ <hr />
36
+
37
+ <%= link_to 'Back to list', spree.admin_oauth_applications_url %>
38
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <% content_for :page_title do %>
2
+ <%= link_to Spree.t('admin.oauth_applications.list'), spree.admin_oauth_applications_url %> /
3
+ <%= @oauth_application.name.capitalize %>
4
+ <% end %>
5
+
6
+ <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @oauth_application } %>
7
+
8
+ <%= form_for [:admin, @oauth_application] do |f| %>
9
+ <fieldset>
10
+ <%= render partial: 'form', locals: { f: f } %>
11
+ <%= render partial: 'spree/admin/shared/edit_resource_links' %>
12
+ </fieldset>
13
+ <% end %>
@@ -0,0 +1,51 @@
1
+ <% content_for :page_title do %>
2
+ <%= Spree.t('admin.oauth_applications.list') %>
3
+ <% end %>
4
+
5
+ <% content_for :page_actions do %>
6
+ <%= button_link_to Spree.t('admin.oauth_applications.new'), new_object_url, class: "btn-success", icon: 'add.svg', id: 'admin_new_role_link' %>
7
+ <% end if can? :create, Spree::OauthApplication %>
8
+
9
+ <% if @oauth_applications.any? %>
10
+ <div class="table-responsive mt-4">
11
+ <table class="table">
12
+ <thead>
13
+ <tr data-hook="admin_roles_index_headers">
14
+ <th><%= Spree.t(:name) %></th>
15
+ <th><%= Spree.t('admin.oauth_applications.uid') %></th>
16
+ <th><%= Spree.t('admin.oauth_applications.scopes') %></th>
17
+ <th class="actions"></th>
18
+ </tr>
19
+ </thead>
20
+ <tbody>
21
+ <% @oauth_applications.each do |application| %>
22
+ <tr id="<%= spree_dom_id application %>" data-hook="admin_roles_index_rows">
23
+ <td><%= application.name %></td>
24
+ <td>
25
+ <div class="input-group" data-controller="password-toggle">
26
+ <%= password_field_tag :password, application.uid, class: 'form-control unhide text-muted border-0 bg-transparent', data: { password_toggle_target: 'unhide' }, readonly: true %>
27
+ <div class="input-group-append">
28
+ <%= button_tag class: 'btn btn-link', data: { action: 'click->password-toggle#password' } do %>
29
+ <%= svg_icon name: "view.svg", width: '18', height: '18' %>
30
+ <% end %>
31
+ </div>
32
+ </div>
33
+ </td>
34
+ <td><%= application.scopes %></td>
35
+ <td class="actions">
36
+ <span class="d-flex justify-content-end">
37
+ <%= link_to_edit(application, no_text: true) if can? :edit, application %>
38
+ <%= link_to_delete(application, no_text: true) if can? :destroy, application %>
39
+ </span>
40
+ </td>
41
+ </tr>
42
+ <% end %>
43
+ </tbody>
44
+ </table>
45
+ </div>
46
+ <% else %>
47
+ <div class="alert alert-warning">
48
+ <%= Spree.t(:no_resource_found, resource: plural_resource_name(Spree::OauthApplication)) %>,
49
+ <%= link_to(Spree.t(:add_one), new_object_url) if can? :create, Spree::OauthApplication %>!
50
+ </div>
51
+ <% end %>
@@ -0,0 +1,15 @@
1
+ <% content_for :page_title do %>
2
+ <%= link_to Spree.t('admin.oauth_applications.list'), spree.admin_oauth_applications_url %> /
3
+ <%= Spree.t('admin.oauth_applications.new') %>
4
+ <% end %>
5
+
6
+ <%= render partial: 'spree/admin/shared/error_messages', locals: { target: @oauth_application } %>
7
+
8
+ <%= turbo_frame_tag 'new_oauth_application' do %>
9
+ <%= form_for [:admin, @oauth_application] do |f| %>
10
+ <fieldset>
11
+ <%= render partial: 'form', locals: { f: f } %>
12
+ <%= render partial: 'spree/admin/shared/new_resource_links' %>
13
+ </fieldset>
14
+ <% end %>
15
+ <% end %>
@@ -1,6 +1,6 @@
1
1
  <div data-hook="admin_option_type_form_fields" class="row">
2
2
  <div class="col-12 col-md-6">
3
- <%= f.field_container :name, class: ['form-group'] do %>
3
+ <%= f.field_container :name do %>
4
4
  <%= f.label :name, Spree.t(:name) %> <span class="required">*</span>
5
5
  <%= f.text_field :name, class: "form-control" %>
6
6
  <%= f.error_message_on :name %>
@@ -8,7 +8,7 @@
8
8
  </div>
9
9
 
10
10
  <div class="col-12 col-md-6">
11
- <%= f.field_container :presentation, class: ['form-group'] do %>
11
+ <%= f.field_container :presentation do %>
12
12
  <%= f.label :presentation, Spree.t(:presentation) %> <span class="required">*</span>
13
13
  <%= f.text_field :presentation, class: "form-control" %>
14
14
  <%= f.error_message_on :presentation %>
@@ -16,7 +16,7 @@
16
16
  </div>
17
17
 
18
18
  <div class="col-12 col-md-6">
19
- <%= f.field_container :filterable, class: ['form-group'] do %>
19
+ <%= f.field_container :filterable do %>
20
20
  <%= label_tag :option_type_filterable do %>
21
21
  <%= f.check_box :filterable %>
22
22
  <%= Spree.t(:filterable) %>
@@ -3,8 +3,8 @@
3
3
  <%= svg_icon name: "sort.svg", width: '18', height: '18' %>
4
4
  <%= f.hidden_field :id %>
5
5
  </td>
6
- <td class="name"><%= f.text_field :name, class: "form-control" %></td>
7
- <td class="presentation"><%= f.text_field :presentation, class: "form-control" %></td>
6
+ <td class="name"><%= f.text_field :name, class: "form-control", required: true %></td>
7
+ <td class="presentation"><%= f.text_field :presentation, class: "form-control", required: true %></td>
8
8
  <td class="actions">
9
9
  <span class="d-flex justify-content-end">
10
10
  <%= link_to_icon_remove_fields f %>
@@ -2,7 +2,7 @@
2
2
  <%= form_for [:admin, order], method: :put, url: set_channel_admin_order_url do |f| %>
3
3
  <fieldset>
4
4
  <div data-hook="admin_order_channel_field">
5
- <%= f.field_container :channel, class: %w[form-group] do %>
5
+ <%= f.field_container :channel do %>
6
6
  <%= f.label :channel, Spree.t(:channel) %>
7
7
  <%= f.text_field :channel, name: 'channel', class: 'form-control' %>
8
8
  <%= f.error_message_on :channel %>
@@ -33,6 +33,7 @@
33
33
 
34
34
  <script>
35
35
  var order_number = '<%= @order.number %>';
36
+ var order_id = '<%= @order.id %>';
36
37
  var shipments = [];
37
38
 
38
39
  <% @order.shipments.each do |shipment| %>
@@ -25,6 +25,7 @@
25
25
 
26
26
  <script>
27
27
  var order_number = '<%= @order.number %>';
28
+ var order_id = '<%= @order.id %>';
28
29
  var shipments = [];
29
30
 
30
31
  <% @order.shipments.each do |shipment| %>
@@ -8,4 +8,10 @@
8
8
  method: :post,
9
9
  icon: 'envelope.svg' %>
10
10
  <% end %>
11
+
12
+ <% if (can? :update, @order) && @order.some_digital? %>
13
+ <%= button_link_to Spree.t('admin.digitals.reset_download_links'),
14
+ reset_digitals_admin_order_url(@order),
15
+ icon: 'hdd.svg' %>
16
+ <% end %>
11
17
  <% end %>
@@ -0,0 +1,151 @@
1
+ <% content_for :table_filter do %>
2
+ <div data-hook="admin_orders_index_search">
3
+
4
+ <%= search_form_for [:admin, @search] do |f| %>
5
+ <div class="row">
6
+
7
+ <div class="date-range-filter col-12 col-lg-8">
8
+ <div class="form-group">
9
+ <%= label_tag :q_created_at_gt, Spree.t(:date_range) %>
10
+ <div class="row pb-0">
11
+ <div class="col-12 col-md-6 mb-3 mb-md-0">
12
+ <div class="input-group datePickerFrom"
13
+ data-wrap="true"
14
+ data-alt-format="<%= Spree.t(:fpr_human_friendly_date_format, scope: 'date_picker', default: 'M j, Y') %>"
15
+ data-max-date="<%= params[:q][:created_at_lt] %>">
16
+ <%= f.text_field :created_at_gt,
17
+ class: 'form-control js-filterable shadow-none',
18
+ value: params[:q][:created_at_gt],
19
+ placeholder: Spree.t(:starting_from),
20
+ 'data-input':'' %>
21
+ <%= render partial: 'spree/admin/shared/cal_close' %>
22
+ </div>
23
+ </div>
24
+ <div class="col-12 col-md-6 mt-3 mt-md-0">
25
+ <div class="input-group datePickerTo"
26
+ data-wrap="true"
27
+ data-alt-format="<%= Spree.t(:fpr_human_friendly_date_format, scope: 'date_picker', default: 'M j, Y') %>"
28
+ data-min-date="<%= params[:q][:created_at_gt] %>">
29
+
30
+ <%= f.text_field :created_at_lt,
31
+ class: 'form-control js-filterable shadow-none',
32
+ value: params[:q][:created_at_lt],
33
+ placeholder: Spree.t(:ending_at),
34
+ 'data-input':'' %>
35
+ <%= render partial: 'spree/admin/shared/cal_close' %>
36
+ </div>
37
+ </div>
38
+ </div>
39
+ </div>
40
+ </div>
41
+ <div class="col-12 col-lg-4">
42
+ <div class="form-group">
43
+ <%= label_tag :q_number_cont, Spree.t(:search_order_number) %>
44
+ <%= f.text_field :number_cont, class: 'form-control js-quick-search-target js-filterable' %>
45
+ </div>
46
+ </div>
47
+
48
+ </div>
49
+
50
+ <div class="row">
51
+
52
+ <div class="col-12 col-lg-4">
53
+ <div class="form-group">
54
+ <%= label_tag :q_state_eq, Spree.t(:status) %>
55
+ <%= f.select :state_eq,
56
+ Spree::Order.state_machines[:state].states.map {|s| [Spree.t("order_state.#{s.name}"), s.value]},
57
+ { include_blank: true },
58
+ class: 'select2-clear js-filterable' %>
59
+ </div>
60
+ </div>
61
+
62
+ <div class="col-12 col-lg-4">
63
+ <div class="form-group">
64
+ <%= label_tag :q_payment_state_eq, Spree.t(:payment_state) %>
65
+ <%= f.select :payment_state_eq, Spree::Order::PAYMENT_STATES.map {|s| [Spree.t("payment_states.#{s}"), s]}, { include_blank: true }, class: 'select2-clear js-filterable' %>
66
+ </div>
67
+ </div>
68
+
69
+ <div class="col-12 col-lg-4">
70
+ <div class="form-group">
71
+ <%= label_tag :q_shipment_state_eq, Spree.t(:shipment_state) %>
72
+ <%= f.select :shipment_state_eq, Spree::Order::SHIPMENT_STATES.map {|s| [Spree.t("shipment_states.#{s}"), s]}, { include_blank: true }, class: 'select2-clear js-filterable' %>
73
+ </div>
74
+ </div>
75
+
76
+ </div>
77
+
78
+ <div class="row">
79
+
80
+ <div class="col-12 col-lg-4">
81
+ <div class="form-group">
82
+ <%= label_tag :q_bill_address_firstname_start, Spree.t(:first_name_begins_with) %>
83
+ <%= f.text_field :bill_address_firstname_start, class: 'form-control js-filterable' %>
84
+ </div>
85
+ </div>
86
+
87
+ <div class="col-12 col-lg-4">
88
+ <div class="form-group">
89
+ <%= label_tag :q_bill_address_lastname_start, Spree.t(:last_name_begins_with) %>
90
+ <%= f.text_field :bill_address_lastname_start, class: 'form-control js-filterable' %>
91
+ </div>
92
+ </div>
93
+
94
+ <div class="col-12 col-lg-4">
95
+ <div class="form-group">
96
+ <%= label_tag :q_email_cont, Spree.t(:email) %>
97
+ <%= f.text_field :email_cont, class: 'form-control js-filterable' %>
98
+ </div>
99
+ </div>
100
+
101
+ </div>
102
+
103
+ <div class="row">
104
+
105
+ <div class="col-12 col-lg-4">
106
+ <div class="form-group">
107
+ <%= label_tag :q_line_items_variant_sku_eq, Spree.t(:sku) %>
108
+ <%= f.text_field :line_items_variant_sku_eq, class: 'form-control js-filterable' %>
109
+ </div>
110
+ </div>
111
+
112
+ <div class="col-12 col-lg-4">
113
+ <div class="form-group">
114
+ <%= label_tag :q_promotions_id_in, Spree.t(:promotion) %>
115
+ <%= f.select :promotions_id_in, Spree::Promotion.applied.pluck(:name, :id), { include_blank: true }, class: 'select2-clear js-filterable' %>
116
+ </div>
117
+ </div>
118
+
119
+ <div class="col-12 col-lg-4">
120
+ <div class="form-group">
121
+ <%= label_tag :q_channel_eq, Spree.t(:channel) %>
122
+ <%= f.select :channel_eq, Spree::Order.distinct.pluck(:channel), { include_blank: true }, class: 'select2-clear js-filterable' %>
123
+ </div>
124
+ </div>
125
+
126
+ <div class="col-12">
127
+ <%= f.field_container :completed_at_not_null do %>
128
+ <div class="custom-control custom-checkbox">
129
+ <%= f.check_box :completed_at_not_null, {checked: @show_only_completed, class: 'custom-control-input'}, '1', '0' %>
130
+ <%= f.label :completed_at_not_null, Spree.t(:show_only_complete_orders), class: 'custom-control-label' %>
131
+ </div>
132
+ <% end %>
133
+
134
+ <%= f.field_container :considered_risky_eq do %>
135
+ <div class="custom-control custom-checkbox">
136
+ <%= f.check_box :considered_risky_eq, {checked: params[:q][:considered_risky_eq] == '1', class: 'custom-control-input'}, '1', '' %>
137
+ <%= f.label :considered_risky_eq, Spree.t(:show_only_considered_risky), class: 'custom-control-label' %>
138
+ </div>
139
+ <% end %>
140
+ </div>
141
+ </div>
142
+
143
+ <div data-hook="admin_orders_index_search_buttons" class="form-actions">
144
+ <%= button Spree.t(:filter_results), 'search.svg' %>
145
+ </div>
146
+
147
+ <% end %>
148
+
149
+ </div>
150
+
151
+ <% end %>
@@ -10,159 +10,10 @@
10
10
  id: 'admin_new_order' %>
11
11
  <% end if can? :create, Spree::Order %>
12
12
 
13
- <% content_for :table_filter do %>
14
- <div data-hook="admin_orders_index_search">
15
-
16
- <%= search_form_for [:admin, @search] do |f| %>
17
- <div class="row">
18
-
19
- <div class="date-range-filter col-12 col-lg-8">
20
- <div class="form-group">
21
- <%= label_tag :q_created_at_gt, Spree.t(:date_range) %>
22
- <div class="row pb-0">
23
- <div class="col-12 col-md-6 mb-3 mb-md-0">
24
- <div class="input-group datePickerFrom"
25
- data-wrap="true"
26
- data-alt-format="<%= Spree.t(:fpr_human_friendly_date_format, scope: 'date_picker', default: 'M j, Y') %>"
27
- data-max-date="<%= params[:q][:created_at_lt] %>">
28
- <%= f.text_field :created_at_gt,
29
- class: 'form-control js-filterable shadow-none',
30
- value: params[:q][:created_at_gt],
31
- placeholder: Spree.t(:starting_from),
32
- 'data-input':'' %>
33
- <%= render partial: 'spree/admin/shared/cal_close' %>
34
- </div>
35
- </div>
36
- <div class="col-12 col-md-6 mt-3 mt-md-0">
37
- <div class="input-group datePickerTo"
38
- data-wrap="true"
39
- data-alt-format="<%= Spree.t(:fpr_human_friendly_date_format, scope: 'date_picker', default: 'M j, Y') %>"
40
- data-min-date="<%= params[:q][:created_at_gt] %>">
41
-
42
- <%= f.text_field :created_at_lt,
43
- class: 'form-control js-filterable shadow-none',
44
- value: params[:q][:created_at_lt],
45
- placeholder: Spree.t(:ending_at),
46
- 'data-input':'' %>
47
- <%= render partial: 'spree/admin/shared/cal_close' %>
48
- </div>
49
- </div>
50
- </div>
51
- </div>
52
- </div>
53
- <div class="col-12 col-lg-4">
54
- <div class="form-group">
55
- <%= label_tag :q_number_cont, Spree.t(:search_order_number) %>
56
- <%= f.text_field :number_cont, class: 'form-control js-quick-search-target js-filterable' %>
57
- </div>
58
- </div>
59
-
60
- </div>
61
-
62
- <div class="row">
63
-
64
- <div class="col-12 col-lg-4">
65
- <div class="form-group">
66
- <%= label_tag :q_state_eq, Spree.t(:status) %>
67
- <%= f.select :state_eq,
68
- Spree::Order.state_machines[:state].states.map {|s| [Spree.t("order_state.#{s.name}"), s.value]},
69
- { include_blank: true },
70
- class: 'select2-clear js-filterable' %>
71
- </div>
72
- </div>
73
-
74
- <div class="col-12 col-lg-4">
75
- <div class="form-group">
76
- <%= label_tag :q_payment_state_eq, Spree.t(:payment_state) %>
77
- <%= f.select :payment_state_eq, Spree::Order::PAYMENT_STATES.map {|s| [Spree.t("payment_states.#{s}"), s]}, { include_blank: true }, class: 'select2-clear js-filterable' %>
78
- </div>
79
- </div>
80
-
81
- <div class="col-12 col-lg-4">
82
- <div class="form-group">
83
- <%= label_tag :q_shipment_state_eq, Spree.t(:shipment_state) %>
84
- <%= f.select :shipment_state_eq, Spree::Order::SHIPMENT_STATES.map {|s| [Spree.t("shipment_states.#{s}"), s]}, { include_blank: true }, class: 'select2-clear js-filterable' %>
85
- </div>
86
- </div>
87
-
88
- </div>
89
-
90
- <div class="row">
91
-
92
- <div class="col-12 col-lg-4">
93
- <div class="form-group">
94
- <%= label_tag :q_bill_address_firstname_start, Spree.t(:first_name_begins_with) %>
95
- <%= f.text_field :bill_address_firstname_start, class: 'form-control js-filterable' %>
96
- </div>
97
- </div>
98
-
99
- <div class="col-12 col-lg-4">
100
- <div class="form-group">
101
- <%= label_tag :q_bill_address_lastname_start, Spree.t(:last_name_begins_with) %>
102
- <%= f.text_field :bill_address_lastname_start, class: 'form-control js-filterable' %>
103
- </div>
104
- </div>
105
-
106
- <div class="col-12 col-lg-4">
107
- <div class="form-group">
108
- <%= label_tag :q_email_cont, Spree.t(:email) %>
109
- <%= f.text_field :email_cont, class: 'form-control js-filterable' %>
110
- </div>
111
- </div>
112
-
113
- </div>
114
-
115
- <div class="row">
116
-
117
- <div class="col-12 col-lg-4">
118
- <div class="form-group">
119
- <%= label_tag :q_line_items_variant_sku_eq, Spree.t(:sku) %>
120
- <%= f.text_field :line_items_variant_sku_eq, class: 'form-control js-filterable' %>
121
- </div>
122
- </div>
123
-
124
- <div class="col-12 col-lg-4">
125
- <div class="form-group">
126
- <%= label_tag :q_promotions_id_in, Spree.t(:promotion) %>
127
- <%= f.select :promotions_id_in, Spree::Promotion.applied.pluck(:name, :id), { include_blank: true }, class: 'select2-clear js-filterable' %>
128
- </div>
129
- </div>
130
-
131
- <div class="col-12 col-lg-4">
132
- <div class="form-group">
133
- <%= label_tag :q_channel_eq, Spree.t(:channel) %>
134
- <%= f.select :channel_eq, Spree::Order.distinct.pluck(:channel), { include_blank: true }, class: 'select2-clear js-filterable' %>
135
- </div>
136
- </div>
137
-
138
- <div class="col-12">
139
- <%= f.field_container :completed_at_not_null do %>
140
- <div class="custom-control custom-checkbox">
141
- <%= f.check_box :completed_at_not_null, {checked: @show_only_completed, class: 'custom-control-input'}, '1', '0' %>
142
- <%= f.label :completed_at_not_null, Spree.t(:show_only_complete_orders), class: 'custom-control-label' %>
143
- </div>
144
- <% end %>
145
-
146
- <%= f.field_container :considered_risky_eq do %>
147
- <div class="custom-control custom-checkbox">
148
- <%= f.check_box :considered_risky_eq, {checked: params[:q][:considered_risky_eq] == '1', class: 'custom-control-input'}, '1', '' %>
149
- <%= f.label :considered_risky_eq, Spree.t(:show_only_considered_risky), class: 'custom-control-label' %>
150
- </div>
151
- <% end %>
152
- </div>
153
- </div>
154
-
155
- <div data-hook="admin_orders_index_search_buttons" class="form-actions">
156
- <%= button Spree.t(:filter_results), 'search.svg' %>
157
- </div>
158
-
159
- <% end %>
160
-
161
- </div>
162
-
163
- <% end %>
13
+ <%= render "search" if @orders.any? || params[:q].present? %>
164
14
 
165
15
  <% if @orders.any? %>
16
+
166
17
  <div data-nav-x-wrapper>
167
18
  <div data-nav-x-container>
168
19
  <table class="table" id="listing_orders" data-hook data-nav-x-content>
@@ -13,13 +13,13 @@
13
13
  <%= collection_select(:payment_method, :type, @providers, :to_s, :name, {}, {id: 'gtwy-type', class: 'select2'}) %>
14
14
  </div>
15
15
  <hr class="my-4">
16
- <%= field_container :payment_method, :name, class: ['form-group'], 'data-hook' => 'name' do %>
16
+ <%= field_container :payment_method, :name, 'data-hook' => 'name' do %>
17
17
  <%= label_tag :payment_method_name, Spree.t(:name) %>
18
18
  <%= text_field :payment_method, :name, class: 'form-control' %>
19
19
  <%= error_message_on :payment_method, :name %>
20
20
  <% end %>
21
21
 
22
- <%= field_container :payment_method, :description, class: ['form-group'], 'data-hook' => 'description' do %>
22
+ <%= field_container :payment_method, :description, 'data-hook' => 'description' do %>
23
23
  <%= label_tag :payment_method_description, Spree.t(:description) %>
24
24
  <%= text_area :payment_method, :description, { cols: 60, rows: 6, class: 'form-control' } %>
25
25
  <% end %>
@@ -13,7 +13,7 @@
13
13
  </thead>
14
14
  <tbody>
15
15
  <% payments.each do |payment| %>
16
- <tr id="<%= dom_id(payment) %>" data-hook="payments_row" data-number="<%= payment.number %>">
16
+ <tr id="<%= dom_id(payment) %>" data-hook="payments_row" data-number="<%= payment.number %>" data-id="<%= payment.id %>">
17
17
  <td><%= link_to payment.number, spree.admin_order_payment_path(@order, payment) %></td>
18
18
  <td><%= pretty_time(payment.created_at) %></td>
19
19
  <td class="amount text-center"><%= payment.display_amount %></td>