spree_admin 5.2.0.rc2 → 5.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 (188) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/spree/admin/application.scss +1 -1
  3. data/app/assets/stylesheets/spree/admin/components/_alerts.scss +1 -1
  4. data/app/assets/stylesheets/spree/admin/components/_buttons.scss +5 -4
  5. data/app/assets/stylesheets/spree/admin/components/_dialogs.scss +0 -1
  6. data/app/assets/stylesheets/spree/admin/components/_dropdowns.scss +6 -0
  7. data/app/assets/stylesheets/spree/admin/components/_main.scss +2 -233
  8. data/app/assets/stylesheets/spree/admin/components/_sidebar.scss +693 -0
  9. data/app/assets/stylesheets/spree/admin/components/_tables.scss +2 -2
  10. data/app/assets/stylesheets/spree/admin/components/_variants_form.scss +1 -2
  11. data/app/assets/stylesheets/spree/admin/global/_variables.scss +15 -12
  12. data/app/assets/stylesheets/spree/admin/shared/_base.scss +9 -3
  13. data/app/assets/stylesheets/spree/admin/shared/_forms.scss +5 -6
  14. data/app/assets/stylesheets/spree/admin/views/_dashboard.scss +14 -0
  15. data/app/controllers/spree/admin/admin_users_controller.rb +0 -2
  16. data/app/controllers/spree/admin/checkouts_controller.rb +1 -4
  17. data/app/controllers/spree/admin/coupon_codes_controller.rb +0 -14
  18. data/app/controllers/spree/admin/customer_returns_controller.rb +0 -13
  19. data/app/controllers/spree/admin/digital_assets_controller.rb +2 -2
  20. data/app/controllers/spree/admin/exports_controller.rb +2 -9
  21. data/app/controllers/spree/admin/gift_cards_controller.rb +7 -14
  22. data/app/controllers/spree/admin/integrations_controller.rb +1 -1
  23. data/app/controllers/spree/admin/invitations_controller.rb +0 -2
  24. data/app/controllers/spree/admin/metafields_controller.rb +1 -1
  25. data/app/controllers/spree/admin/oauth_applications_controller.rb +0 -10
  26. data/app/controllers/spree/admin/option_types_controller.rb +0 -10
  27. data/app/controllers/spree/admin/orders_controller.rb +1 -1
  28. data/app/controllers/spree/admin/page_blocks_controller.rb +1 -1
  29. data/app/controllers/spree/admin/pages_controller.rb +1 -1
  30. data/app/controllers/spree/admin/payment_methods_controller.rb +1 -11
  31. data/app/controllers/spree/admin/policies_controller.rb +4 -0
  32. data/app/controllers/spree/admin/posts_controller.rb +2 -10
  33. data/app/controllers/spree/admin/promotion_actions_controller.rb +1 -1
  34. data/app/controllers/spree/admin/promotion_rules_controller.rb +1 -1
  35. data/app/controllers/spree/admin/promotions_controller.rb +1 -1
  36. data/app/controllers/spree/admin/properties_controller.rb +0 -12
  37. data/app/controllers/spree/admin/reports_controller.rb +1 -1
  38. data/app/controllers/spree/admin/resource_controller.rb +27 -17
  39. data/app/controllers/spree/admin/return_authorizations_controller.rb +0 -10
  40. data/app/controllers/spree/admin/shipping_methods_controller.rb +4 -0
  41. data/app/controllers/spree/admin/stock_items_controller.rb +8 -11
  42. data/app/controllers/spree/admin/stock_locations_controller.rb +1 -1
  43. data/app/controllers/spree/admin/stock_transfers_controller.rb +0 -10
  44. data/app/controllers/spree/admin/store_credits_controller.rb +35 -35
  45. data/app/controllers/spree/admin/taxonomies_controller.rb +0 -10
  46. data/app/controllers/spree/admin/taxons_controller.rb +1 -1
  47. data/app/controllers/spree/admin/themes_controller.rb +6 -2
  48. data/app/controllers/spree/admin/translations_controller.rb +1 -1
  49. data/app/controllers/spree/admin/users_controller.rb +7 -17
  50. data/app/controllers/spree/admin/webhooks_subscribers_controller.rb +0 -10
  51. data/app/controllers/spree/admin/zones_controller.rb +0 -7
  52. data/app/helpers/spree/admin/base_helper.rb +1 -1
  53. data/app/helpers/spree/admin/drawer_helper.rb +6 -6
  54. data/app/helpers/spree/admin/dropdown_helper.rb +26 -16
  55. data/app/helpers/spree/admin/modal_helper.rb +2 -0
  56. data/app/helpers/spree/admin/navigation_helper.rb +47 -4
  57. data/app/helpers/spree/admin/orders_filters_helper.rb +3 -0
  58. data/app/helpers/spree/admin/promotion_actions_helper.rb +1 -1
  59. data/app/helpers/spree/admin/promotion_rules_helper.rb +1 -1
  60. data/app/helpers/spree/admin/translations_helper.rb +1 -1
  61. data/app/javascript/spree/admin/application.js +2 -1
  62. data/app/javascript/spree/admin/controllers/dropdown_controller.js +85 -14
  63. data/app/javascript/spree/admin/controllers/sidebar_controller.js +231 -0
  64. data/app/javascript/spree/admin/controllers/tooltip_controller.js +84 -31
  65. data/app/models/spree/admin/form_builder.rb +76 -17
  66. data/app/models/spree/admin/navigation/builder.rb +82 -0
  67. data/app/models/spree/admin/navigation/item.rb +177 -0
  68. data/app/models/spree/admin/navigation.rb +193 -0
  69. data/app/views/layouts/spree/admin.html.erb +1 -1
  70. data/app/views/spree/admin/assets/edit.html.erb +1 -1
  71. data/app/views/spree/admin/custom_domains/_custom_domains.html.erb +1 -1
  72. data/app/views/spree/admin/custom_domains/_form.html.erb +2 -14
  73. data/app/views/spree/admin/digital_assets/_table.html.erb +1 -1
  74. data/app/views/spree/admin/gift_cards/_filters.html.erb +25 -16
  75. data/app/views/spree/admin/gift_cards/index.html.erb +1 -1
  76. data/app/views/spree/admin/integrations/index.html.erb +20 -8
  77. data/app/views/spree/admin/invitations/new.html.erb +2 -1
  78. data/app/views/spree/admin/metafield_definitions/_filters.html.erb +1 -1
  79. data/app/views/spree/admin/newsletter_subscribers/_filters.html.erb +1 -1
  80. data/app/views/spree/admin/newsletter_subscribers/_table_header.html.erb +2 -2
  81. data/app/views/spree/admin/oauth_applications/_table_header.html.erb +1 -1
  82. data/app/views/spree/admin/orders/_customer.html.erb +3 -3
  83. data/app/views/spree/admin/orders/_filters.html.erb +33 -25
  84. data/app/views/spree/admin/orders/_header.html.erb +0 -5
  85. data/app/views/spree/admin/orders/_list.html.erb +3 -3
  86. data/app/views/spree/admin/orders/_table_filter_dropdown.html.erb +1 -1
  87. data/app/views/spree/admin/page_blocks/edit.html.erb +3 -3
  88. data/app/views/spree/admin/page_blocks/forms/_image.html.erb +2 -5
  89. data/app/views/spree/admin/page_builder/_add_block.html.erb +1 -1
  90. data/app/views/spree/admin/page_builder/_header.html.erb +1 -1
  91. data/app/views/spree/admin/page_builder/_pages_dropdown.html.erb +2 -2
  92. data/app/views/spree/admin/page_builder/_sidebar_block.html.erb +1 -1
  93. data/app/views/spree/admin/page_builder/_sidebar_colors.html.erb +2 -2
  94. data/app/views/spree/admin/page_builder/_sidebar_fonts.html.erb +3 -3
  95. data/app/views/spree/admin/page_builder/_sidebar_section.html.erb +1 -1
  96. data/app/views/spree/admin/page_links/_form.html.erb +4 -13
  97. data/app/views/spree/admin/page_links/_list.html.erb +1 -1
  98. data/app/views/spree/admin/page_links/edit.html.erb +1 -1
  99. data/app/views/spree/admin/page_sections/edit.html.erb +3 -3
  100. data/app/views/spree/admin/page_sections/forms/_header.html.erb +0 -2
  101. data/app/views/spree/admin/page_sections/new.html.erb +1 -1
  102. data/app/views/spree/admin/pages/_table_header.html.erb +3 -3
  103. data/app/views/spree/admin/payment_methods/index.html.erb +5 -1
  104. data/app/views/spree/admin/payments/_payment.html.erb +7 -0
  105. data/app/views/spree/admin/policies/_filters.html.erb +1 -1
  106. data/app/views/spree/admin/posts/_form.html.erb +1 -4
  107. data/app/views/spree/admin/posts/filters.html.erb +18 -8
  108. data/app/views/spree/admin/products/_bulk_operations.html.erb +2 -2
  109. data/app/views/spree/admin/products/_filters.html.erb +17 -6
  110. data/app/views/spree/admin/products/_table_filter_dropdown.html.erb +1 -1
  111. data/app/views/spree/admin/products/edit.html.erb +0 -2
  112. data/app/views/spree/admin/products/form/_status.html.erb +0 -3
  113. data/app/views/spree/admin/products/form/_variants.html.erb +1 -1
  114. data/app/views/spree/admin/profile/edit.html.erb +9 -61
  115. data/app/views/spree/admin/promotions/_filters.html.erb +23 -13
  116. data/app/views/spree/admin/promotions/_table_filter_dropdown.html.erb +1 -1
  117. data/app/views/spree/admin/promotions/_table_header.html.erb +1 -1
  118. data/app/views/spree/admin/promotions/form/_kind.html.erb +4 -4
  119. data/app/views/spree/admin/promotions/form/_settings.html.erb +2 -13
  120. data/app/views/spree/admin/refund_reasons/_table_header.html.erb +1 -1
  121. data/app/views/spree/admin/refunds/_form.html.erb +1 -9
  122. data/app/views/spree/admin/reimbursement_types/_table_header.html.erb +1 -1
  123. data/app/views/spree/admin/return_authorization_reasons/_table_header.html.erb +1 -1
  124. data/app/views/spree/admin/return_authorizations/filters.html.erb +1 -1
  125. data/app/views/spree/admin/roles/index.html.erb +1 -1
  126. data/app/views/spree/admin/shared/_audit_nav.html.erb +2 -0
  127. data/app/views/spree/admin/shared/_calendar_range_picker.html.erb +2 -2
  128. data/app/views/spree/admin/shared/_content_header.html.erb +5 -2
  129. data/app/views/spree/admin/shared/_developers_nav.html.erb +2 -4
  130. data/app/views/spree/admin/shared/_header.html.erb +5 -7
  131. data/app/views/spree/admin/shared/_index_table.html.erb +5 -4
  132. data/app/views/spree/admin/shared/_index_table_options.html.erb +1 -1
  133. data/app/views/spree/admin/shared/_navigation.html.erb +5 -0
  134. data/app/views/spree/admin/shared/_navigation_item.html.erb +64 -0
  135. data/app/views/spree/admin/shared/_new_item_dropdown.html.erb +2 -2
  136. data/app/views/spree/admin/shared/_page_section_image.html.erb +2 -5
  137. data/app/views/spree/admin/shared/_page_section_logo.html.erb +1 -1
  138. data/app/views/spree/admin/shared/_returns_and_refunds_nav.html.erb +2 -3
  139. data/app/views/spree/admin/shared/_shipping_nav.html.erb +3 -2
  140. data/app/views/spree/admin/shared/_sidebar.html.erb +33 -7
  141. data/app/views/spree/admin/shared/_stock_nav.html.erb +6 -3
  142. data/app/views/spree/admin/shared/_tax_nav.html.erb +1 -2
  143. data/app/views/spree/admin/shared/_team_nav.html.erb +2 -3
  144. data/app/views/spree/admin/shared/_user_dropdown.html.erb +29 -19
  145. data/app/views/spree/admin/shared/sidebar/_customers_nav.html.erb +7 -0
  146. data/app/views/spree/admin/shared/sidebar/_orders_nav.html.erb +22 -2
  147. data/app/views/spree/admin/shared/sidebar/_products_nav.html.erb +21 -0
  148. data/app/views/spree/admin/shared/sidebar/_promotions_nav.html.erb +8 -0
  149. data/app/views/spree/admin/shared/sidebar/_returns_nav.html.erb +12 -0
  150. data/app/views/spree/admin/shared/sidebar/_store_dropdown.html.erb +4 -2
  151. data/app/views/spree/admin/shared/sidebar/_store_nav.html.erb +15 -1
  152. data/app/views/spree/admin/shared/sidebar/_storefront_nav.html.erb +25 -3
  153. data/app/views/spree/admin/shared/sortable_tree/_taxonomy.html.erb +1 -1
  154. data/app/views/spree/admin/shipping_categories/_table_header.html.erb +1 -1
  155. data/app/views/spree/admin/shipping_methods/_table_header.html.erb +1 -1
  156. data/app/views/spree/admin/stock_items/_filters.html.erb +18 -8
  157. data/app/views/spree/admin/stock_locations/_table_header.html.erb +2 -2
  158. data/app/views/spree/admin/stock_locations/_table_row.html.erb +1 -1
  159. data/app/views/spree/admin/stock_transfers/_filters.html.erb +19 -9
  160. data/app/views/spree/admin/store_credit_categories/index.html.erb +1 -1
  161. data/app/views/spree/admin/store_credits/_list.html.erb +3 -3
  162. data/app/views/spree/admin/storefront/edit.html.erb +2 -14
  163. data/app/views/spree/admin/stores/form/_basic.html.erb +2 -8
  164. data/app/views/spree/admin/stores/form/_checkout.html.erb +2 -2
  165. data/app/views/spree/admin/stores/form/_checkout_links.html.erb +1 -1
  166. data/app/views/spree/admin/stores/form/_emails.html.erb +1 -1
  167. data/app/views/spree/admin/tax_categories/_table_header.html.erb +2 -2
  168. data/app/views/spree/admin/tax_rates/_form.html.erb +1 -10
  169. data/app/views/spree/admin/tax_rates/_table_header.html.erb +2 -2
  170. data/app/views/spree/admin/taxonomies/_table_header.html.erb +1 -1
  171. data/app/views/spree/admin/taxons/_form.html.erb +2 -9
  172. data/app/views/spree/admin/themes/_theme.html.erb +1 -1
  173. data/app/views/spree/admin/translations/translation_rows/_permalink_field_row.html.erb +1 -12
  174. data/app/views/spree/admin/users/_filters.html.erb +26 -17
  175. data/app/views/spree/admin/users/index.html.erb +1 -1
  176. data/config/initializers/spree_admin_navigation.rb +510 -0
  177. data/config/locales/en.yml +6 -0
  178. data/lib/generators/spree/admin/scaffold/templates/controller.rb.tt +3 -1
  179. data/lib/generators/spree/admin/scaffold/templates/views/_filters.html.erb.tt +1 -1
  180. data/lib/generators/spree/admin/scaffold/templates/views/_table_header.html.erb.tt +2 -2
  181. data/lib/generators/spree/admin/scaffold/templates/views/_table_row.html.erb.tt +8 -6
  182. data/lib/spree/admin/engine.rb +64 -2
  183. data/lib/spree/admin/runtime_configuration.rb +1 -0
  184. data/lib/spree/admin.rb +20 -0
  185. metadata +17 -15
  186. data/app/assets/stylesheets/spree/admin/components/_offcanvas.scss +0 -26
  187. data/app/javascript/spree/admin/helpers/canvas.js +0 -29
  188. data/app/views/spree/admin/shared/_offcanvas_nav.html.erb +0 -12
@@ -60,7 +60,7 @@ $body-bg: $white !default;
60
60
  $enable-shadows: false;
61
61
  $enable-responsive-font-sizes: true;
62
62
  $font-family-sans-serif: Inter, sans-serif !default;
63
- $font-size-base: 0.8125rem !default;
63
+ $font-size-base: 0.875rem !default;
64
64
  $font-size-plus: 0.875rem !default;
65
65
  $font-size-sm: 0.75rem !default;
66
66
  $font-size-lg: 1rem !default;
@@ -73,7 +73,7 @@ $border-radius: 0.5rem !default;
73
73
  $border-radius-sm: 0.4rem !default;
74
74
  $border-radius-lg: 0.75rem !default;
75
75
  $border-color: rgba($gray-100, 0.85) !default;
76
- $input-border-color: rgba($gray-200, 0.85) !default;
76
+ $input-border-color: $gray-200 !default;
77
77
  $list-group-border-color: $border-color !default;
78
78
  $list-group-hover-bg: $gray-25 !default;
79
79
  $list-group-active-bg: $action !default;
@@ -91,7 +91,7 @@ $card-spacer-x: 1.25rem !default;
91
91
  $component-active-bg: $blue !default;
92
92
 
93
93
  $input-placeholder-color: $gray-500;
94
- $input-padding-y: .55rem !default;
94
+ $input-padding-y: .5rem !default;
95
95
  $input-disabled-bg: $gray-25 !default;
96
96
  $input-focus-border-color: $blue !default;
97
97
  $custom-select-disabled-bg: $gray-50 !default;
@@ -103,15 +103,17 @@ $link-hover-decoration: underline !default;
103
103
 
104
104
  $btn-active-box-shadow: inset 0 3px 5px rgba($black, .025) !default;
105
105
  $btn-disabled-opacity: 0.7 !default;
106
+ $btn-padding-y: 0.35rem !default;
107
+ $btn-padding-x: 0.75rem !default;
106
108
 
107
- $nav-link-padding-y: .5rem !default;
108
- $nav-link-padding-x: .6rem !default;
109
+ $nav-link-padding-y: .35rem !default;
110
+ $nav-link-padding-x: .75rem !default;
109
111
 
110
112
  $box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1),0 2px 4px -1px rgba(0, 0, 0, 0.06) !default;
111
- $box-shadow-xs: rgba(43, 34, 51, 0.03) 0px 1px 1px !default;
113
+ $box-shadow-xs: rgba(43, 34, 51, 0.05) 0px 1px 1px !default;
112
114
  $box-shadow-lg: rgba(0, 5, 13, 0.5) 0px 4px 8px 2px;
113
115
  $input-box-shadow: $box-shadow-xs !default;
114
- $btn-box-shadow: $input-box-shadow !default;
116
+ $btn-box-shadow: $box-shadow-xs !default;
115
117
 
116
118
  $btn-font-weight: $font-weight-medium !default;
117
119
 
@@ -166,15 +168,15 @@ $display4-weight: 400 !default;
166
168
  $dropdown-bg: $white !default;
167
169
  $dropdown-border-width: 0px !default;
168
170
  $dropdown-border-radius: 1rem !default;
169
- $dropdown-inner-border-radius: 0.75rem !default;
171
+ $dropdown-inner-border-radius: 0.8rem !default;
170
172
  $dropdown-link-hover-bg: rgba($gray-100, 0.5) !default;
171
- $dropdown-box-shadow: 0px 0px 0px 1px $gray-200, 0px 6px 12px -3px rgba($gray-300, 0.35), 0px 6px 18px 0px rgba($gray-300, 0.35) !default;
173
+ $dropdown-box-shadow: 0px 0px 0px 1px rgba($gray-300, 0.5), 0px 6px 12px -3px rgba($gray-300, 0.35), 0px 6px 18px 0px rgba($gray-300, 0.35) !default;
172
174
  $dropdown-padding-x: 0.25rem !default;
173
175
  $dropdown-padding-y: 0.25rem !default;
174
176
  $dropdown-divider-bg: $gray-50 !default;
175
177
  $dropdown-divider-margin-y: 0.25rem !default;
176
178
  $dropdown-header-color: $text-muted !default;
177
- $dropdown-item-padding-y: 0.45rem !default;
179
+ $dropdown-item-padding-y: 0.5rem !default;
178
180
  $dropdown-item-padding-x: 0.65rem !default;
179
181
 
180
182
  $zindex-dropdown: 1050;
@@ -213,7 +215,7 @@ $embed-responsive-aspect-ratios: (
213
215
  ) !default;
214
216
 
215
217
  // tables
216
- $table-cell-padding: 1.15rem .75rem !default;
218
+ $table-cell-padding: 1rem .75rem !default;
217
219
 
218
220
  $code-color: $body-color !default;
219
221
  $code-bg: $gray-50 !default;
@@ -223,8 +225,9 @@ $list-group-bg: transparent !default;
223
225
  $list-group-item-padding-x: 1.25rem !default;
224
226
  $list-group-item-padding-y: 0.75rem !default;
225
227
  $header-bg: $body-bg !default;
226
- $header-height: 54px !default;
228
+ $header-height: 58px !default;
227
229
  $sidebar-width: 220px !default;
230
+ $sidebar-width-collapsed: 59px !default;
228
231
  $sidebar-bg: $light !default;
229
232
 
230
233
  $progress-bar-bg: rgba($blue, 0.75) !default;
@@ -7,7 +7,7 @@ html {
7
7
  }
8
8
  body {
9
9
  @extend .h-100;
10
- overflow-y:scroll;
10
+ overflow-y: scroll;
11
11
  }
12
12
 
13
13
  body * {
@@ -163,7 +163,7 @@ strong {
163
163
  }
164
164
  .focus-shadow {
165
165
  &:focus, &:focus-within, &:active {
166
- box-shadow: $input-btn-focus-box-shadow;
166
+ box-shadow: $input-focus-box-shadow;
167
167
  }
168
168
  }
169
169
  .focus-border {
@@ -379,6 +379,10 @@ small,
379
379
  border: 2px dashed $blue !important;
380
380
  }
381
381
 
382
+ .sort-handle {
383
+ cursor: grab;
384
+ }
385
+
382
386
  .handle {
383
387
  cursor: grab !important;
384
388
  }
@@ -702,8 +706,10 @@ div.uppy-Root {
702
706
  .breadcrumb {
703
707
  gap: 0.5rem;
704
708
  align-items: center;
705
- color: $text-muted;
706
709
  font-weight: $font-weight-medium;
710
+ height: 32px;
711
+ border-left: 1px solid $gray-50;
712
+ border-radius: 0;
707
713
 
708
714
  li {
709
715
  a {
@@ -1,6 +1,10 @@
1
1
  .custom-checkbox .custom-control-label::before {
2
2
  border-radius: 0.25rem !important;
3
3
  border-color: $input-border-color;
4
+ box-shadow: $input-box-shadow;
5
+ }
6
+ .custom-checkbox .custom-control-label::before, .custom-checkbox .custom-control-label::after {
7
+ top: 0rem;
4
8
  }
5
9
 
6
10
  label {
@@ -22,7 +26,7 @@ label {
22
26
  }
23
27
 
24
28
  .form-text {
25
- font-size: $font-size-sm;
29
+ font-size: $font-size-base;
26
30
  color: $text-muted;
27
31
  margin-top: 0;
28
32
  }
@@ -71,11 +75,6 @@ input[type="file"] {
71
75
  border-radius: $input-border-radius;
72
76
  padding-right: 2.5rem;
73
77
  }
74
- .custom-select, .form-control, .ts-control {
75
- &:hover:not(:focus):not(:active):not(.active):not(:focus-visible):not(:focus-within) {
76
- border: 1px solid $gray-100;
77
- }
78
- }
79
78
 
80
79
  .ts-control>input {
81
80
  min-width: auto !important;
@@ -31,4 +31,18 @@
31
31
  display: flex;
32
32
  }
33
33
  }
34
+ }
35
+
36
+ #updater-notice {
37
+ background-color: $white;
38
+ width: 100%;
39
+ display: flex;
40
+ flex-direction: row;
41
+ gap: 1rem;
42
+ justify-content: flex-start;
43
+ align-items: center;
44
+ padding: 0.5rem 0.5rem;
45
+ border: 1px solid $border-color;
46
+ border-radius: $border-radius-lg;
47
+ box-shadow: $box-shadow-xs;
34
48
  }
@@ -13,8 +13,6 @@ module Spree
13
13
 
14
14
  # GET /admin/admin_users
15
15
  def index
16
- params[:q] ||= {}
17
- params[:q][:s] ||= 'created_at asc'
18
16
  @search = scope.includes(role_users: :role, avatar_attachment: :blob).
19
17
  where(role_users: { resource: @parent }).
20
18
  ransack(params[:q])
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  module Admin
3
- class CheckoutsController < BaseController
3
+ class CheckoutsController < ResourceController
4
4
  include Spree::Admin::OrdersFiltersHelper
5
5
 
6
6
  before_action :load_user, only: [:index]
@@ -10,9 +10,6 @@ module Spree
10
10
  add_breadcrumb_icon 'inbox'
11
11
 
12
12
  def index
13
- params[:q] ||= {}
14
- params[:q][:s] ||= 'created_at desc'
15
-
16
13
  load_orders
17
14
  render template: 'spree/admin/orders/index'
18
15
  end
@@ -4,20 +4,6 @@ module Spree
4
4
  belongs_to 'spree/promotion', find_by: :id
5
5
 
6
6
  include PromotionsBreadcrumbConcern
7
-
8
- def collection
9
- return @collection if @collection.present?
10
-
11
- @collection = super
12
-
13
- params[:q] ||= {}
14
- @search = @collection.ransack(params[:q])
15
- @collection = if request.format.csv?
16
- @search.result
17
- else
18
- @search.result.page(params[:page])
19
- end
20
- end
21
7
  end
22
8
  end
23
9
  end
@@ -6,19 +6,6 @@ module Spree
6
6
  add_breadcrumb Spree.t(:customer_returns), :admin_customer_returns_path
7
7
 
8
8
  def index; end
9
-
10
- private
11
-
12
- def collection
13
- return @collection if @collection.present?
14
-
15
- params[:q] ||= {}
16
-
17
- # @search needs to be defined as this is passed to search_form_for
18
- @search = current_store.customer_returns.accessible_by(current_ability, :index).ransack(params[:q])
19
- per_page = params[:per_page]
20
- @collection = @search.result.order(created_at: :desc).page(params[:page]).per(per_page)
21
- end
22
9
  end
23
10
  end
24
11
  end
@@ -13,8 +13,8 @@ module Spree
13
13
  Spree::Digital
14
14
  end
15
15
 
16
- def collection
17
- parent.digitals
16
+ def scope
17
+ parent.digitals.accessible_by(current_ability, :index)
18
18
  end
19
19
 
20
20
  def collection_url
@@ -22,15 +22,8 @@ module Spree
22
22
  Spree.t('admin.export_created')
23
23
  end
24
24
 
25
- def collection
26
- return @collection if @collection.present?
27
-
28
- @collection = super
29
-
30
- params[:q] ||= {}
31
- params[:q][:s] ||= 'created_at desc'
32
- @search = @collection.ransack(params[:q])
33
- @collection = @search.result.includes(:user, attachment_attachment: :blob).page(params[:page])
25
+ def collection_includes
26
+ [:user, attachment_attachment: :blob]
34
27
  end
35
28
 
36
29
  def set_user
@@ -1,7 +1,8 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class GiftCardsController < ResourceController
4
- before_action :load_user
4
+ prepend_before_action :load_user
5
+ prepend_before_action :set_user_id_filter, only: :index
5
6
  before_action :add_breadcrumbs
6
7
  before_action :load_orders, only: :show
7
8
 
@@ -21,23 +22,15 @@ module Spree
21
22
  end
22
23
  end
23
24
 
24
- def collection
25
- return @collection if @collection.present?
25
+ def collection_includes
26
+ [:user, :created_by]
27
+ end
26
28
 
27
- @collection = super
29
+ def set_user_id_filter
30
+ return if params[:user_id].blank?
28
31
 
29
32
  params[:q] ||= {}
30
- params[:q][:s] ||= 'created_at desc'
31
33
  params[:q][:user_id_eq] = params[:user_id] if params[:user_id].present?
32
-
33
- @search = @collection
34
- @search = @search.ransack(params[:q])
35
-
36
- @collection = @search.result.includes(:user, :created_by)
37
-
38
- @collection = @collection.page(params[:page]).per(params[:per_page])
39
-
40
- @collection
41
34
  end
42
35
 
43
36
  def location_after_destroy
@@ -16,7 +16,7 @@ module Spree
16
16
  private
17
17
 
18
18
  def allowed_integration_types
19
- @allowed_integration_types ||= Rails.application.config.spree.integrations.map { |klass| [klass.to_s, klass] }.to_h
19
+ @allowed_integration_types ||= Spree.integrations.map { |klass| [klass.to_s, klass] }.to_h
20
20
  end
21
21
 
22
22
  def require_integration_type
@@ -13,8 +13,6 @@ module Spree
13
13
 
14
14
  # GET /admin/invitations
15
15
  def index
16
- params[:q] ||= {}
17
- params[:q][:s] ||= 'created_at desc'
18
16
  @search = scope.includes(:inviter, :role).ransack(params[:q])
19
17
  @collection = @search.result
20
18
  end
@@ -28,7 +28,7 @@ module Spree
28
28
  end
29
29
 
30
30
  def allowed_model_classes
31
- @allowed_model_classes ||= Rails.application.config.spree.metafield_enabled_resources
31
+ @allowed_model_classes ||= Spree.metafields.enabled_resources
32
32
  end
33
33
 
34
34
  def update_turbo_stream_enabled?
@@ -7,16 +7,6 @@ module Spree
7
7
 
8
8
  private
9
9
 
10
- def collection
11
- return @collection if @collection.present?
12
-
13
- @collection = super
14
-
15
- params[:q] ||= {}
16
- @search = @collection.ransack(params[:q])
17
- @collection = @search.result.page(params[:page]).per(500)
18
- end
19
-
20
10
  def create_turbo_stream_enabled?
21
11
  true
22
12
  end
@@ -10,16 +10,6 @@ module Spree
10
10
 
11
11
  private
12
12
 
13
- def collection
14
- return @collection if @collection.present?
15
-
16
- @collection = super
17
-
18
- params[:q] ||= {}
19
- @search = @collection.ransack(params[:q])
20
- @collection = @search.result.all
21
- end
22
-
23
13
  def setup_new_option_value
24
14
  @option_type.option_values.build if @option_type.option_values.empty?
25
15
  end
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  module Admin
3
- class OrdersController < Spree::Admin::BaseController
3
+ class OrdersController < Spree::Admin::ResourceController
4
4
  include Spree::Admin::OrderConcern
5
5
  include Spree::Admin::OrdersFiltersHelper
6
6
  include Spree::Admin::OrderBreadcrumbConcern
@@ -40,7 +40,7 @@ module Spree
40
40
 
41
41
  def allowed_types
42
42
  [
43
- *Rails.application.config.spree.page_blocks,
43
+ *Spree.page_builder.page_blocks,
44
44
  *parent&.available_blocks_to_add
45
45
  ].uniq.sort_by(&:name)
46
46
  end
@@ -27,7 +27,7 @@ module Spree
27
27
  spree.edit_admin_theme_path(current_store.default_theme, page_id: object.id, **options)
28
28
  end
29
29
 
30
- def collection
30
+ def scope
31
31
  super.custom.without_previews
32
32
  end
33
33
 
@@ -22,16 +22,6 @@ module Spree
22
22
  end
23
23
  end
24
24
 
25
- def collection
26
- return @collection if @collection.present?
27
-
28
- params[:q] ||= {}
29
-
30
- @collection = super.order(position: :asc)
31
- @search = @collection.ransack(params[:q])
32
- @collection = @search.result.page(params[:page]).per(params[:per_page])
33
- end
34
-
35
25
  def require_payment_type
36
26
  redirect_to spree.admin_payment_methods_path unless params.dig(:payment_method, :type).present?
37
27
  end
@@ -43,7 +33,7 @@ module Spree
43
33
  def allowed_payment_types
44
34
  # We need to map to strings, otherwise some weird things happen with STI
45
35
  # where Rails can't find the ancestor class when we try to save the payment method.
46
- Rails.application.config.spree.payment_methods.map(&:to_s)
36
+ Spree.payment_methods.map(&:to_s)
47
37
  end
48
38
 
49
39
  def permitted_resource_params
@@ -7,6 +7,10 @@ module Spree
7
7
 
8
8
  private
9
9
 
10
+ def collection_includes
11
+ [:rich_text_translations]
12
+ end
13
+
10
14
  def permitted_resource_params
11
15
  params.require(:policy).permit(permitted_policy_attributes)
12
16
  end
@@ -14,16 +14,8 @@ module Spree
14
14
 
15
15
  private
16
16
 
17
- def collection
18
- return @collection if @collection.present?
19
-
20
- @collection = super
21
-
22
- params[:q] ||= {}
23
- params[:q][:s] ||= 'published_at desc'
24
-
25
- @search = @collection.ransack(params[:q])
26
- @collection = @search.result.page(params[:page]).per(params[:per_page])
17
+ def collection_includes
18
+ [:author, :post_category, :image_attachment]
27
19
  end
28
20
 
29
21
  def load_post_categories
@@ -30,7 +30,7 @@ module Spree
30
30
  end
31
31
 
32
32
  def allowed_action_types
33
- Rails.application.config.spree.promotions.actions
33
+ Spree.promotions.actions
34
34
  end
35
35
 
36
36
  def location_after_save
@@ -28,7 +28,7 @@ module Spree
28
28
  end
29
29
 
30
30
  def allowed_rule_types
31
- Rails.application.config.spree.promotions.rules
31
+ Spree.promotions.rules
32
32
  end
33
33
 
34
34
  def location_after_save
@@ -28,7 +28,7 @@ module Spree
28
28
  end
29
29
 
30
30
  def load_form_data
31
- @promotion_rules = Rails.application.config.spree.promotions.rules
31
+ @promotion_rules = Spree.promotions.rules
32
32
  @rule_types = @promotion_rules.map do |promotion_rule|
33
33
  [Spree.t("promotion_rule_types.#{promotion_rule.to_s.demodulize.underscore}.name"), promotion_rule.to_s]
34
34
  end
@@ -12,18 +12,6 @@ module Spree
12
12
  true
13
13
  end
14
14
 
15
- def collection
16
- return @collection if @collection.present?
17
-
18
- # params[:q] can be blank upon pagination
19
- params[:q] = {} if params[:q].blank?
20
-
21
- @collection = super
22
- @search = @collection.ransack(params[:q])
23
- @collection = @search.result.
24
- page(params[:page])
25
- end
26
-
27
15
  def add_breadcrumbs
28
16
  if @property.present? && @property.persisted?
29
17
  add_breadcrumb @property.presentation, spree.edit_admin_property_path(@property)
@@ -54,7 +54,7 @@ module Spree
54
54
  end
55
55
 
56
56
  def allowed_report_types
57
- Rails.application.config.spree.reports.map(&:to_s)
57
+ Spree.reports.map(&:to_s)
58
58
  end
59
59
 
60
60
  def permitted_resource_params
@@ -1,12 +1,16 @@
1
1
  class Spree::Admin::ResourceController < Spree::Admin::BaseController
2
2
  include Spree::Admin::Callbacks
3
3
 
4
- helper_method :new_object_url, :edit_object_url, :object_url, :collection_url, :model_class, :search_collection, :paginated_collection
4
+ helper_method :new_object_url, :edit_object_url, :object_url, :collection_url, :model_class
5
5
  before_action :load_resource
6
6
  before_action :set_currency, :set_current_store, only: [:new, :create]
7
7
 
8
8
  rescue_from ActiveRecord::RecordNotFound, with: :resource_not_found
9
9
 
10
+ def index
11
+ @collection = collection
12
+ end
13
+
10
14
  # GET /admin/<resource_name>/new
11
15
  def new
12
16
  invoke_callbacks(:new_action, :before)
@@ -217,7 +221,7 @@ class Spree::Admin::ResourceController < Spree::Admin::BaseController
217
221
 
218
222
  # Returns the collection of resources (as a scope)
219
223
  # @return [ActiveRecord::Relation]
220
- def collection
224
+ def scope
221
225
  return parent.send(controller_name) if parent_data.present?
222
226
 
223
227
  base_scope = model_class.try(:for_store, current_store) || model_class
@@ -227,30 +231,36 @@ class Spree::Admin::ResourceController < Spree::Admin::BaseController
227
231
 
228
232
  if model_class.respond_to?(:accessible_by) &&
229
233
  !current_ability.has_block?(params[:action], model_class)
230
- base_scope.accessible_by(current_ability, action)
234
+ base_scope.accessible_by(current_ability, action).includes(collection_includes)
231
235
  else
232
- base_scope
236
+ base_scope.includes(collection_includes)
237
+ end
238
+ end
239
+
240
+ # keeping this as @search for backwards compatibility
241
+ # @return [Ransack::Search]
242
+ def search_collection
243
+ @search ||= begin
244
+ params[:q] ||= {}
245
+ params[:q][:s] ||= collection_default_sort if collection_default_sort.present?
246
+ scope.ransack(params[:q])
233
247
  end
234
248
  end
235
249
 
236
250
  # Returns the filtered and paginated ransack results
237
251
  # @return [ActiveRecord::Relation]
238
- def paginated_collection
239
- @paginated_collection ||= begin
240
- # Check if collection is already a ransack collection and return it
241
- return collection if collection.respond_to?(:current_page)
252
+ def collection
253
+ @collection ||= search_collection.result(distinct: true).page(params[:page]).per(params[:per_page])
254
+ end
242
255
 
243
- search_collection.result(distinct: true).page(params[:page]).per(params[:per_page])
244
- end
256
+ def collection_includes
257
+ []
245
258
  end
246
259
 
247
- # Returns the ransack search collection
248
- # @return [Ransack::Search]
249
- def search_collection
250
- @search_collection ||= begin
251
- params[:q] ||= {}
252
- collection.ransack(params[:q])
253
- end
260
+ # Override in child controllers to set default sort order
261
+ # @return [String, nil] Ransack sort string (e.g., "name asc", "created_at desc")
262
+ def collection_default_sort
263
+ nil
254
264
  end
255
265
 
256
266
  # Returns the URL to redirect to after destroying a resource
@@ -21,16 +21,6 @@ module Spree
21
21
  def location_after_destroy
22
22
  spree.edit_admin_order_path(@return_authorization.order)
23
23
  end
24
-
25
- def collection
26
- return @collection if @collection.present?
27
-
28
- params[:q] ||= {}
29
-
30
- # @search needs to be defined as this is passed to search_form_for
31
- @search = current_store.return_authorizations.accessible_by(current_ability, :index).ransack(params[:q])
32
- @collection = @search.result.order(created_at: :desc).page(params[:page]).per(params[:per_page])
33
- end
34
24
  end
35
25
  end
36
26
  end
@@ -8,6 +8,10 @@ module Spree
8
8
 
9
9
  private
10
10
 
11
+ def collection_includes
12
+ [:zones, :calculator]
13
+ end
14
+
11
15
  def set_default_values
12
16
  @shipping_method.display_on = 'both'
13
17
  @shipping_method.shipping_categories = [Spree::ShippingCategory.first]
@@ -11,18 +11,15 @@ module Spree
11
11
  true
12
12
  end
13
13
 
14
- def collection
15
- params[:q] ||= {}
16
- params[:q][:s] ||= 'created_at desc'
14
+ def scope
15
+ super.joins(:variant).where(spree_variants: { track_inventory: true }).merge(current_store.variants.eligible).reorder('')
16
+ end
17
17
 
18
- @search = super.accessible_by(current_ability, :update).ransack(params[:q])
19
- @stock_items = @search.result.
20
- joins(:variant).
21
- where(spree_variants: { track_inventory: true }).
22
- merge(current_store.variants.eligible).
23
- includes(:stock_location, [variant: [product: [variants: [:images], master: [:images]], images: []]]).
24
- page(params[:page]).
25
- per(params[:per_page])
18
+ def collection_includes
19
+ {
20
+ stock_location: [],
21
+ variant: [option_values: :option_type, product: [variant_images: [], variants: [:images], master: [:images]], images: []]
22
+ }
26
23
  end
27
24
 
28
25
  def add_breadcrumbs