spree_admin 5.0.6 → 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.
- checksums.yaml +4 -4
- data/app/assets/images/login_sidebar_background.png +0 -0
- data/app/assets/stylesheets/spree/admin/components/_bulk_panel.scss +8 -1
- data/app/assets/stylesheets/spree/admin/components/_buttons.scss +12 -20
- data/app/assets/stylesheets/spree/admin/components/_cards.scss +9 -3
- data/app/assets/stylesheets/spree/admin/components/_dropdowns.scss +13 -40
- data/app/assets/stylesheets/spree/admin/components/_filters.scss +32 -3
- data/app/assets/stylesheets/spree/admin/components/_main.scss +107 -31
- data/app/assets/stylesheets/spree/admin/components/_media_form.scss +21 -9
- data/app/assets/stylesheets/spree/admin/components/_modals.scss +4 -3
- data/app/assets/stylesheets/spree/admin/components/_navbar.scss +5 -9
- data/app/assets/stylesheets/spree/admin/components/_navigation.scss +0 -1
- data/app/assets/stylesheets/spree/admin/components/_sortable_tree.scss +6 -2
- data/app/assets/stylesheets/spree/admin/components/_tables.scss +35 -5
- data/app/assets/stylesheets/spree/admin/global/_variables.scss +37 -17
- data/app/assets/stylesheets/spree/admin/plugins/tom-select.bootstrap4.scss +5 -4
- data/app/assets/stylesheets/spree/admin/shared/_base.scss +50 -17
- data/app/assets/stylesheets/spree/admin/shared/_forms.scss +6 -2
- data/app/assets/stylesheets/spree/admin/views/_page_builder.scss +30 -21
- data/app/controllers/concerns/spree/admin/breadcrumb_concern.rb +22 -0
- data/app/controllers/concerns/spree/admin/preferences_concern.rb +22 -0
- data/app/controllers/concerns/spree/admin/products_breadcrumb_concern.rb +22 -0
- data/app/controllers/concerns/spree/admin/promotions_breadcrumb_concern.rb +23 -0
- data/app/controllers/concerns/spree/admin/storefront_breadcrumb_concern.rb +12 -0
- data/app/controllers/spree/admin/addresses_controller.rb +4 -0
- data/app/controllers/spree/admin/admin_users_controller.rb +112 -0
- data/app/controllers/spree/admin/assets_controller.rb +7 -9
- data/app/controllers/spree/admin/base_controller.rb +21 -10
- data/app/controllers/spree/admin/checkouts_controller.rb +4 -0
- data/app/controllers/spree/admin/classifications_controller.rb +4 -0
- data/app/controllers/spree/admin/coupon_codes_controller.rb +2 -0
- data/app/controllers/spree/admin/custom_domains_controller.rb +6 -0
- data/app/controllers/spree/admin/customer_returns_controller.rb +4 -0
- data/app/controllers/spree/admin/dashboard_controller.rb +8 -2
- data/app/controllers/spree/admin/digital_assets_controller.rb +8 -0
- data/app/controllers/spree/admin/exports_controller.rb +6 -2
- data/app/controllers/spree/admin/integrations_controller.rb +61 -0
- data/app/controllers/spree/admin/invitations_controller.rb +128 -0
- data/app/controllers/spree/admin/line_items_controller.rb +4 -0
- data/app/controllers/spree/admin/oauth_applications_controller.rb +6 -0
- data/app/controllers/spree/admin/option_types_controller.rb +15 -0
- data/app/controllers/spree/admin/option_values_controller.rb +4 -0
- data/app/controllers/spree/admin/orders/return_authorizations_controller.rb +4 -0
- data/app/controllers/spree/admin/orders_controller.rb +12 -1
- data/app/controllers/spree/admin/page_blocks_controller.rb +3 -2
- data/app/controllers/spree/admin/page_links_controller.rb +9 -0
- data/app/controllers/spree/admin/page_sections_controller.rb +13 -4
- data/app/controllers/spree/admin/pages_controller.rb +7 -0
- data/app/controllers/spree/admin/payment_methods_controller.rb +23 -12
- data/app/controllers/spree/admin/post_categories_controller.rb +3 -0
- data/app/controllers/spree/admin/posts_controller.rb +11 -0
- data/app/controllers/spree/admin/products_controller.rb +15 -12
- data/app/controllers/spree/admin/promotion_actions_controller.rb +10 -2
- data/app/controllers/spree/admin/promotion_rules_controller.rb +10 -2
- data/app/controllers/spree/admin/promotions_controller.rb +6 -0
- data/app/controllers/spree/admin/properties_controller.rb +15 -0
- data/app/controllers/spree/admin/refund_reasons_controller.rb +7 -0
- data/app/controllers/spree/admin/refunds_controller.rb +4 -0
- data/app/controllers/spree/admin/reimbursement_types_controller.rb +7 -0
- data/app/controllers/spree/admin/reimbursements_controller.rb +4 -0
- data/app/controllers/spree/admin/reports_controller.rb +12 -2
- data/app/controllers/spree/admin/resource_controller.rb +1 -1
- data/app/controllers/spree/admin/return_authorization_reasons_controller.rb +7 -0
- data/app/controllers/spree/admin/return_authorizations_controller.rb +4 -0
- data/app/controllers/spree/admin/return_items_controller.rb +6 -0
- data/app/controllers/spree/admin/role_users_controller.rb +36 -0
- data/app/controllers/spree/admin/roles_controller.rb +8 -0
- data/app/controllers/spree/admin/shipments_controller.rb +2 -2
- data/app/controllers/spree/admin/shipping_categories_controller.rb +7 -0
- data/app/controllers/spree/admin/shipping_methods_controller.rb +6 -0
- data/app/controllers/spree/admin/stock_items_controller.rb +13 -0
- data/app/controllers/spree/admin/stock_locations_controller.rb +7 -0
- data/app/controllers/spree/admin/stock_transfers_controller.rb +14 -2
- data/app/controllers/spree/admin/store_credit_categories_controller.rb +5 -0
- data/app/controllers/spree/admin/store_credits_controller.rb +4 -0
- data/app/controllers/spree/admin/storefront_controller.rb +3 -0
- data/app/controllers/spree/admin/stores_controller.rb +17 -2
- data/app/controllers/spree/admin/tax_categories_controller.rb +7 -0
- data/app/controllers/spree/admin/tax_rates_controller.rb +6 -0
- data/app/controllers/spree/admin/taxonomies_controller.rb +15 -0
- data/app/controllers/spree/admin/taxons_controller.rb +24 -1
- data/app/controllers/spree/admin/themes_controller.rb +7 -0
- data/app/controllers/spree/admin/translations_controller.rb +9 -1
- data/app/controllers/spree/admin/user_passwords_controller.rb +22 -0
- data/app/controllers/spree/admin/user_sessions_controller.rb +23 -0
- data/app/controllers/spree/admin/users_controller.rb +11 -2
- data/app/controllers/spree/admin/variants_controller.rb +13 -0
- data/app/controllers/spree/admin/webhooks_subscribers_controller.rb +3 -0
- data/app/controllers/spree/admin/zones_controller.rb +5 -0
- data/app/helpers/spree/admin/base_helper.rb +32 -31
- data/app/helpers/spree/admin/bulk_operations_helper.rb +8 -2
- data/app/helpers/spree/admin/modal_helper.rb +1 -1
- data/app/helpers/spree/admin/navigation_helper.rb +11 -5
- data/app/helpers/spree/admin/orders_filters_helper.rb +1 -1
- data/app/helpers/spree/admin/orders_helper.rb +1 -3
- data/app/helpers/spree/admin/payments_helper.rb +5 -0
- data/app/helpers/spree/admin/posts_helper.rb +1 -1
- data/app/helpers/spree/admin/session_assets_helper.rb +1 -1
- data/app/helpers/spree/admin/stores_helper.rb +1 -18
- data/app/helpers/spree/admin/tags_helper.rb +2 -2
- data/app/javascript/spree/admin/application.js +2 -0
- data/app/javascript/spree/admin/controllers/active_storage_upload_controller.js +11 -2
- data/app/javascript/spree/admin/controllers/multi_tom_select_controller.js +2 -3
- data/app/javascript/spree/admin/controllers/select_controller.js +6 -0
- data/app/javascript/spree/admin/controllers/variants_form_controller.js +17 -23
- data/app/javascript/spree/admin/helpers/bootstrap.js +3 -3
- data/app/javascript/spree/admin/helpers/uppy_active_storage.js +3 -15
- data/app/views/active_storage/_upload_form.html.erb +3 -3
- data/app/views/layouts/spree/minimal.html.erb +22 -0
- data/app/views/spree/admin/admin_users/_admin_user.html.erb +19 -0
- data/app/views/spree/admin/admin_users/_audit_log.html.erb +5 -0
- data/app/views/spree/admin/admin_users/_form.html.erb +12 -0
- data/app/views/spree/admin/admin_users/edit.html.erb +35 -0
- data/app/views/spree/admin/admin_users/index.html.erb +18 -0
- data/app/views/spree/admin/admin_users/new.html.erb +21 -0
- data/app/views/spree/admin/admin_users/show.html.erb +113 -0
- data/app/views/spree/admin/coupon_codes/index.html.erb +6 -6
- data/app/views/spree/admin/custom_domains/_custom_domains.html.erb +1 -1
- data/app/views/spree/admin/customer_returns/index.html.erb +1 -1
- data/app/views/spree/admin/dashboard/_store_preview.html.erb +1 -1
- data/app/views/spree/admin/dashboard/_top_products.html.erb +4 -2
- data/app/views/spree/admin/digital_assets/_table.html.erb +1 -1
- data/app/views/spree/admin/digital_assets/index.html.erb +0 -1
- data/app/views/spree/admin/exports/index.html.erb +1 -1
- data/app/views/spree/admin/integrations/_integration.html.erb +36 -0
- data/app/views/spree/admin/integrations/edit.html.erb +11 -0
- data/app/views/spree/admin/integrations/index.html.erb +23 -0
- data/app/views/spree/admin/integrations/new.html.erb +14 -0
- data/app/views/spree/admin/invitations/_invitation.html.erb +52 -0
- data/app/views/spree/admin/invitations/create.turbo_stream.erb +4 -0
- data/app/views/spree/admin/invitations/index.html.erb +21 -0
- data/app/views/spree/admin/invitations/new.html.erb +32 -0
- data/app/views/spree/admin/invitations/show.html.erb +9 -0
- data/app/views/spree/admin/line_items/new.html.erb +2 -2
- data/app/views/spree/admin/oauth_applications/index.html.erb +1 -1
- data/app/views/spree/admin/option_types/edit.html.erb +1 -1
- data/app/views/spree/admin/option_types/index.html.erb +1 -1
- data/app/views/spree/admin/orders/_customer.html.erb +1 -2
- data/app/views/spree/admin/orders/_filters.html.erb +17 -21
- data/app/views/spree/admin/orders/_list.html.erb +1 -1
- data/app/views/spree/admin/orders/_refunds.html.erb +1 -1
- data/app/views/spree/admin/orders/_return_authorizations.html.erb +1 -3
- data/app/views/spree/admin/orders/_shipment.html.erb +1 -1
- data/app/views/spree/admin/orders/_table_filter_dropdown.html.erb +2 -2
- data/app/views/spree/admin/orders/customer_returns/_customer_return.html.erb +1 -1
- data/app/views/spree/admin/orders/customer_returns/_return_item_decision.html.erb +1 -1
- data/app/views/spree/admin/orders/return_authorizations/_form.html.erb +1 -1
- data/app/views/spree/admin/orders/return_authorizations/show.html.erb +2 -2
- data/app/views/spree/admin/page_blocks/_form_tab_buttons.html.erb +5 -7
- data/app/views/spree/admin/page_blocks/edit.html.erb +3 -5
- data/app/views/spree/admin/page_builder/_add_block.html.erb +1 -1
- data/app/views/spree/admin/page_builder/_header.html.erb +35 -28
- data/app/views/spree/admin/page_builder/_pages_dropdown.html.erb +15 -21
- data/app/views/spree/admin/page_builder/_sidebar.html.erb +1 -1
- data/app/views/spree/admin/page_builder/_sidebar_block.html.erb +1 -1
- data/app/views/spree/admin/page_links/_list.html.erb +2 -2
- data/app/views/spree/admin/page_links/edit.html.erb +2 -4
- data/app/views/spree/admin/page_sections/_form_tab_buttons.html.erb +6 -10
- data/app/views/spree/admin/page_sections/forms/_featured_posts.html.erb +5 -0
- data/app/views/spree/admin/page_sections/new.html.erb +1 -1
- data/app/views/spree/admin/pages/edit.html.erb +2 -2
- data/app/views/spree/admin/pages/index.html.erb +1 -2
- data/app/views/spree/admin/payment_methods/index.html.erb +16 -15
- data/app/views/spree/admin/payments/_payment.html.erb +1 -1
- data/app/views/spree/admin/payments/source_forms/_gateway.html.erb +1 -1
- data/app/views/spree/admin/post_categories/index.html.erb +1 -1
- data/app/views/spree/admin/posts/index.html.erb +1 -1
- data/app/views/spree/admin/preferences/_password_field.html.erb +2 -2
- data/app/views/spree/admin/products/_bulk_operations.html.erb +1 -1
- data/app/views/spree/admin/products/_filters.html.erb +2 -5
- data/app/views/spree/admin/products/_form.html.erb +1 -2
- data/app/views/spree/admin/products/_list.html.erb +1 -1
- data/app/views/spree/admin/products/_table_filter_dropdown.html.erb +2 -2
- data/app/views/spree/admin/products/form/_categorization.html.erb +34 -30
- data/app/views/spree/admin/promotion_actions/_promotion_action.html.erb +1 -1
- data/app/views/spree/admin/promotion_rules/_promotion_rule.html.erb +1 -1
- data/app/views/spree/admin/promotions/_filters.html.erb +2 -6
- data/app/views/spree/admin/promotions/_header.html.erb +1 -3
- data/app/views/spree/admin/promotions/_sidebar.html.erb +18 -0
- data/app/views/spree/admin/promotions/_table_filter_dropdown.html.erb +2 -2
- data/app/views/spree/admin/promotions/index.html.erb +1 -1
- data/app/views/spree/admin/properties/edit.html.erb +1 -1
- data/app/views/spree/admin/properties/index.html.erb +1 -1
- data/app/views/spree/admin/refund_reasons/index.html.erb +1 -1
- data/app/views/spree/admin/reimbursement_types/index.html.erb +1 -1
- data/app/views/spree/admin/reimbursements/edit.html.erb +2 -2
- data/app/views/spree/admin/reimbursements/show.html.erb +1 -1
- data/app/views/spree/admin/reports/_report.html.erb +1 -1
- data/app/views/spree/admin/return_authorization_reasons/index.html.erb +1 -1
- data/app/views/spree/admin/return_authorizations/_filters.html.erb +2 -2
- data/app/views/spree/admin/return_authorizations/_list.html.erb +1 -1
- data/app/views/spree/admin/roles/edit.html.erb +6 -4
- data/app/views/spree/admin/roles/index.html.erb +11 -7
- data/app/views/spree/admin/shared/_alerts.html.erb +1 -1
- data/app/views/spree/admin/shared/_breadcrumbs.html.erb +13 -0
- data/app/views/spree/admin/shared/_calendar_range_picker.html.erb +1 -1
- data/app/views/spree/admin/shared/_content_header.html.erb +3 -3
- data/app/views/spree/admin/shared/_filters_button.html.erb +1 -1
- data/app/views/spree/admin/shared/_filters_search_bar.html.erb +1 -1
- data/app/views/spree/admin/shared/_head.html.erb +4 -0
- data/app/views/spree/admin/shared/_header.html.erb +26 -17
- data/app/views/spree/admin/shared/_index_table_options.html.erb +1 -1
- data/app/views/spree/admin/shared/_multi_product_picker.html.erb +1 -1
- data/app/views/spree/admin/shared/_new_item_dropdown.html.erb +32 -0
- data/app/views/spree/admin/shared/_no_resource_found.html.erb +6 -3
- data/app/views/spree/admin/shared/_offcanvas_nav.html.erb +1 -14
- data/app/views/spree/admin/shared/_refunds.html.erb +1 -1
- data/app/views/spree/admin/shared/_sidebar.html.erb +0 -8
- data/app/views/spree/admin/shared/_team_nav.html.erb +13 -0
- data/app/views/spree/admin/shared/_user_dropdown.html.erb +25 -20
- data/app/views/spree/admin/shared/devise/_links.html.erb +18 -0
- data/app/views/spree/admin/shared/sidebar/_enterprise_edition_notice.html.erb +7 -5
- data/app/views/spree/admin/shared/sidebar/_integrations_nav.html.erb +5 -7
- data/app/views/spree/admin/shared/sidebar/_orders_nav.html.erb +2 -2
- data/app/views/spree/admin/shared/sidebar/_products_nav.html.erb +2 -2
- data/app/views/spree/admin/shared/sidebar/_promotions_nav.html.erb +17 -0
- data/app/views/spree/admin/shared/sidebar/_returns_nav.html.erb +1 -1
- data/app/views/spree/admin/shared/sidebar/_store_dropdown.html.erb +33 -75
- data/app/views/spree/admin/shared/sidebar/_store_nav.html.erb +14 -34
- data/app/views/spree/admin/shared/sidebar/_storefront_nav.html.erb +4 -2
- data/app/views/spree/admin/shared/sidebar/_vendors_nav.html.erb +9 -7
- data/app/views/spree/admin/shared/sortable_tree/_taxonomy.html.erb +1 -1
- data/app/views/spree/admin/shipping_categories/index.html.erb +1 -1
- data/app/views/spree/admin/shipping_methods/_form.html.erb +7 -134
- data/app/views/spree/admin/shipping_methods/form/_display.html.erb +25 -0
- data/app/views/spree/admin/shipping_methods/form/_estimated_transit_business_days.html.erb +23 -0
- data/app/views/spree/admin/shipping_methods/form/_shipping_categories.html.erb +21 -0
- data/app/views/spree/admin/shipping_methods/form/_tax_category.html.erb +16 -0
- data/app/views/spree/admin/shipping_methods/form/_tracking_url.html.erb +18 -0
- data/app/views/spree/admin/shipping_methods/form/_zones.html.erb +26 -0
- data/app/views/spree/admin/shipping_methods/index.html.erb +1 -1
- data/app/views/spree/admin/stock_items/index.html.erb +1 -1
- data/app/views/spree/admin/stock_locations/_stock_location.html.erb +5 -3
- data/app/views/spree/admin/stock_locations/index.html.erb +4 -2
- data/app/views/spree/admin/stock_transfers/index.html.erb +1 -1
- data/app/views/spree/admin/store_credit_categories/index.html.erb +1 -1
- data/app/views/spree/admin/store_credits/_list.html.erb +1 -1
- data/app/views/spree/admin/stores/edit_emails.html.erb +1 -1
- data/app/views/spree/admin/stores/form/_emails.html.erb +1 -1
- data/app/views/spree/admin/tax_categories/index.html.erb +1 -1
- data/app/views/spree/admin/tax_rates/index.html.erb +1 -1
- data/app/views/spree/admin/taxonomies/index.html.erb +1 -1
- data/app/views/spree/admin/themes/_theme.html.erb +6 -4
- data/app/views/spree/admin/themes/_theme_preview_image.html.erb +6 -4
- data/app/views/spree/admin/themes/index.html.erb +1 -1
- data/app/views/spree/admin/translations/edit.html.erb +2 -2
- data/app/views/spree/admin/user_passwords/edit.html.erb +21 -0
- data/app/views/spree/admin/user_passwords/new.html.erb +12 -0
- data/app/views/spree/admin/user_sessions/new.html.erb +16 -0
- data/app/views/spree/admin/users/_form.html.erb +9 -7
- data/app/views/spree/admin/users/_user.html.erb +4 -4
- data/app/views/spree/admin/users/index.html.erb +1 -1
- data/app/views/spree/admin/users/new.html.erb +1 -1
- data/app/views/spree/admin/variants/_search_result.html.erb +1 -1
- data/app/views/spree/admin/variants/_variant.html.erb +2 -2
- data/app/views/spree/admin/variants/form/_basic.html.erb +4 -4
- data/app/views/spree/admin/variants/form/_media_asset.html.erb +1 -1
- data/app/views/spree/admin/webhooks_subscribers/index.html.erb +1 -1
- data/app/views/spree/admin/zones/_form.html.erb +11 -15
- data/app/views/spree/admin/zones/index.html.erb +1 -1
- data/config/locales/en.yml +4 -0
- data/config/routes.rb +13 -1
- data/lib/spree/admin/engine.rb +2 -0
- data/lib/spree/admin.rb +1 -0
- metadata +65 -9
- data/app/views/spree/admin/products/form/_tax.html.erb +0 -12
@@ -15,6 +15,12 @@ module Spree
|
|
15
15
|
|
16
16
|
before_action :load_form_data, only: [:new, :create, :edit, :update]
|
17
17
|
|
18
|
+
add_breadcrumb Spree.t(:products), :admin_products_path
|
19
|
+
add_breadcrumb Spree.t(:taxonomies), :admin_taxonomies_path
|
20
|
+
|
21
|
+
add_breadcrumb_icon 'package'
|
22
|
+
before_action :add_breadcrumb_taxonomy
|
23
|
+
|
18
24
|
def show
|
19
25
|
redirect_to location_after_save
|
20
26
|
end
|
@@ -71,7 +77,10 @@ module Spree
|
|
71
77
|
end
|
72
78
|
|
73
79
|
def set_permalink_params
|
74
|
-
|
80
|
+
return unless params[:permalink_part]
|
81
|
+
|
82
|
+
params[:taxon] ||= {}
|
83
|
+
params[:taxon][:permalink] = [@parent_permalink.presence, params[:permalink_part]].compact_blank.join('/')
|
75
84
|
end
|
76
85
|
|
77
86
|
def collection_url
|
@@ -93,6 +102,20 @@ module Spree
|
|
93
102
|
[Spree.t("admin.taxon_rules.match_policies.#{policy}"), policy]
|
94
103
|
end
|
95
104
|
end
|
105
|
+
|
106
|
+
def add_breadcrumb_taxonomy
|
107
|
+
return unless @taxonomy.present?
|
108
|
+
|
109
|
+
add_breadcrumb @taxonomy.name, collection_url
|
110
|
+
|
111
|
+
if @object.present? && @object.persisted?
|
112
|
+
add_breadcrumb @object.name, spree.edit_admin_taxonomy_taxon_path(@taxonomy, @object.id)
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def permitted_resource_params
|
117
|
+
params.require(:taxon).permit(permitted_taxon_attributes)
|
118
|
+
end
|
96
119
|
end
|
97
120
|
end
|
98
121
|
end
|
@@ -3,6 +3,9 @@ module Spree
|
|
3
3
|
class ThemesController < ResourceController
|
4
4
|
layout :choose_layout
|
5
5
|
|
6
|
+
include StorefrontBreadcrumbConcern
|
7
|
+
add_breadcrumb Spree.t(:themes), :admin_themes_path
|
8
|
+
|
6
9
|
def edit
|
7
10
|
@theme_preview = params[:theme_preview_id].present? ? @theme.previews.find(params[:theme_preview_id]) : @theme.create_preview
|
8
11
|
@page = if params[:page_id].present?
|
@@ -70,6 +73,10 @@ module Spree
|
|
70
73
|
def collection
|
71
74
|
super.without_previews.order(default: :desc).includes(screenshot_attachment: :blob)
|
72
75
|
end
|
76
|
+
|
77
|
+
def permitted_resource_params
|
78
|
+
params.require(:theme).permit(permitted_theme_attributes + @object.preferences.keys.map { |key| "preferred_#{key}" })
|
79
|
+
end
|
73
80
|
end
|
74
81
|
end
|
75
82
|
end
|
@@ -36,7 +36,15 @@ module Spree
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def resource_class
|
39
|
-
@resource_class ||=
|
39
|
+
@resource_class ||= begin
|
40
|
+
klass = params[:resource_type]
|
41
|
+
allowed_resource_class.find { |allowed_class| allowed_class.to_s == klass } ||
|
42
|
+
raise(ActiveRecord::RecordNotFound, "Resource type not found")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def allowed_resource_class
|
47
|
+
Rails.application.config.spree.translatable_resources
|
40
48
|
end
|
41
49
|
|
42
50
|
def set_resource
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class UserPasswordsController < defined?(Devise::PasswordsController) ? Devise::PasswordsController : Spree::Admin::BaseController
|
4
|
+
layout 'spree/minimal'
|
5
|
+
|
6
|
+
def create
|
7
|
+
self.resource = resource_class.send_reset_password_instructions(resource_params)
|
8
|
+
yield resource if block_given?
|
9
|
+
|
10
|
+
set_flash_message(:notice, :send_instructions) if is_navigational_format?
|
11
|
+
# Don't not show error message that the email was not found
|
12
|
+
respond_with({}, location: after_sending_reset_password_instructions_path_for(resource_name))
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def translation_scope
|
18
|
+
'devise.user_passwords'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Spree
|
2
|
+
module Admin
|
3
|
+
class UserSessionsController < defined?(Devise::SessionsController) ? Devise::SessionsController : Spree::Admin::BaseController
|
4
|
+
layout 'spree/minimal'
|
5
|
+
|
6
|
+
# We need to overwrite this action because `return_to` url may be in a different domain
|
7
|
+
# So we need to pass `allow_other_host` option to `redirect_to` method
|
8
|
+
def create
|
9
|
+
self.resource = warden.authenticate!(auth_options)
|
10
|
+
set_flash_message!(:notice, :signed_in)
|
11
|
+
sign_in(resource_name, resource)
|
12
|
+
yield resource if block_given?
|
13
|
+
redirect_to after_sign_in_path_for(resource), allow_other_host: true
|
14
|
+
end
|
15
|
+
|
16
|
+
protected
|
17
|
+
|
18
|
+
def translation_scope
|
19
|
+
'devise.user_sessions'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -10,7 +10,12 @@ module Spree
|
|
10
10
|
before_action :load_last_order_data, only: :show
|
11
11
|
before_action :remove_empty_params, only: :update
|
12
12
|
|
13
|
-
|
13
|
+
add_breadcrumb_icon 'users'
|
14
|
+
add_breadcrumb Spree.t(:customers), :admin_users_path
|
15
|
+
|
16
|
+
def show
|
17
|
+
add_breadcrumb @user.name, spree.admin_user_path(@user)
|
18
|
+
end
|
14
19
|
|
15
20
|
def create
|
16
21
|
@user = Spree.user_class.new(user_params)
|
@@ -52,7 +57,7 @@ module Spree
|
|
52
57
|
params[:q][:s] ||= 'created_at desc'
|
53
58
|
params[:q][:created_at_not_null] ||= 1
|
54
59
|
|
55
|
-
@collection =
|
60
|
+
@collection = model_class.accessible_by(current_ability, :index)
|
56
61
|
@search = @collection.ransack(params[:q])
|
57
62
|
@collection = @search.result(distinct: true).
|
58
63
|
includes(
|
@@ -64,6 +69,10 @@ module Spree
|
|
64
69
|
page(params[:page]).per(params[:per_page])
|
65
70
|
end
|
66
71
|
|
72
|
+
def find_resource
|
73
|
+
model_class.accessible_by(current_ability, :show).find(params[:id])
|
74
|
+
end
|
75
|
+
|
67
76
|
private
|
68
77
|
|
69
78
|
def user_params
|
@@ -3,9 +3,12 @@ module Spree
|
|
3
3
|
class VariantsController < ResourceController
|
4
4
|
include StockLocationsHelper
|
5
5
|
|
6
|
+
include ProductsBreadcrumbConcern
|
7
|
+
|
6
8
|
belongs_to 'spree/product', find_by: :slug
|
7
9
|
before_action :load_data, only: [:edit, :update]
|
8
10
|
before_action :strip_attributes, only: [:update]
|
11
|
+
before_action :add_breadcrumbs
|
9
12
|
|
10
13
|
edit_action.before :build_prices
|
11
14
|
edit_action.before :build_stock_items
|
@@ -85,6 +88,16 @@ module Spree
|
|
85
88
|
params[:variant].delete(:prices_attributes) unless can?(:manage, @variant.prices.first)
|
86
89
|
params[:variant].delete(:stock_items_attributes) unless can?(:manage, @variant.stock_items.first)
|
87
90
|
end
|
91
|
+
|
92
|
+
def add_breadcrumbs
|
93
|
+
if @variant.present? && @variant.persisted?
|
94
|
+
add_breadcrumb @variant.human_name, spree.edit_admin_product_variant_path(@product, @variant)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def permitted_resource_params
|
99
|
+
params.require(:variant).permit(permitted_variant_attributes)
|
100
|
+
end
|
88
101
|
end
|
89
102
|
end
|
90
103
|
end
|
@@ -6,6 +6,9 @@ module Spree
|
|
6
6
|
create.before :process_subscriptions
|
7
7
|
update.before :process_subscriptions
|
8
8
|
|
9
|
+
add_breadcrumb Spree.t(:developers), :admin_oauth_applications_path
|
10
|
+
add_breadcrumb Spree.t(:webhooks), :admin_webhooks_subscribers_path
|
11
|
+
|
9
12
|
def show
|
10
13
|
@webhooks_subscriber = Webhooks::Subscriber.find(params[:id])
|
11
14
|
@events = @webhooks_subscriber.events.order(created_at: :desc).page(params[:page]).per(params[:per_page])
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Spree
|
2
2
|
module Admin
|
3
3
|
class ZonesController < ResourceController
|
4
|
+
add_breadcrumb Spree.t(:zones), :admin_zones_path
|
4
5
|
before_action :load_data, except: :index
|
5
6
|
|
6
7
|
def new
|
@@ -32,6 +33,10 @@ module Spree
|
|
32
33
|
@states = @selected_country&.states&.order(:name) || Spree::State.none
|
33
34
|
@zones = Zone.order(:name)
|
34
35
|
end
|
36
|
+
|
37
|
+
def permitted_resource_params
|
38
|
+
params.require(:zone).permit(permitted_zone_attributes)
|
39
|
+
end
|
35
40
|
end
|
36
41
|
end
|
37
42
|
end
|
@@ -25,12 +25,10 @@ module Spree
|
|
25
25
|
# this is used to display different sidebar navigation for settings pages
|
26
26
|
# @return [Boolean]
|
27
27
|
def settings_active?
|
28
|
-
@settings_active || %w[
|
29
|
-
payment_methods refund_reasons reimbursement_types
|
30
|
-
shipping_categories store_credit_categories
|
31
|
-
|
32
|
-
custom_domains audits exports imports return_authorization_reasons
|
33
|
-
documents stripe_tax_registrations members subscriptions stock_locations webhooks_subscribers].include?(controller_name)
|
28
|
+
@settings_active || %w[admin_users audits custom_domains exports imports invitations oauth_applications
|
29
|
+
payment_methods refund_reasons reimbursement_types return_authorization_reasons roles
|
30
|
+
shipping_categories shipping_methods stock_locations store_credit_categories
|
31
|
+
stores tax_categories tax_rates webhooks webhooks_subscribers zones].include?(controller_name)
|
34
32
|
end
|
35
33
|
|
36
34
|
# @return [Array<String>] the available countries for checkout
|
@@ -199,37 +197,40 @@ module Spree
|
|
199
197
|
# renders all the preference fields for an object
|
200
198
|
# @param object [Spree::TaxRate, Spree::Calculator, Spree::PaymentMethod, Spree::ShippingMethod, Spree::Store] the object to render the preference fields for
|
201
199
|
# @param form [ActionView::Helpers::FormBuilder] the form builder
|
200
|
+
# @param i18n_scope [String] the i18n scope for the preference fields
|
202
201
|
# @return [String] the preference fields
|
203
|
-
def preference_fields(object, form)
|
202
|
+
def preference_fields(object, form, i18n_scope: '')
|
204
203
|
return unless object.respond_to?(:preferences)
|
205
204
|
|
206
|
-
fields = object.preferences.keys.map
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
end
|
205
|
+
fields = object.preferences.keys.map { |key| preference_field(object, form, key, i18n_scope: i18n_scope) }
|
206
|
+
safe_join(fields)
|
207
|
+
end
|
208
|
+
|
209
|
+
def preference_field(object, form, key, i18n_scope: '')
|
210
|
+
return unless object.has_preference?(key)
|
211
|
+
|
212
|
+
case key
|
213
|
+
when :currency
|
214
|
+
content_tag(:div, form.label("preferred_#{key}", Spree.t(key, scope: i18n_scope)) +
|
215
|
+
form.currency_select("preferred_#{key}", current_store.supported_currencies.split(','), {}, { class: 'custom-select', disabled: current_store.supported_currencies.split(',').count == 1 }),
|
216
|
+
class: 'form-group', id: [object.class.to_s.parameterize, 'preference', key].join('-'))
|
217
|
+
else
|
218
|
+
if object.preference_type(key).to_sym == :boolean
|
219
|
+
content_tag(:div, class: 'form-group custom-control custom-checkbox') do
|
220
|
+
preference_field_for(form, "preferred_#{key}", type: object.preference_type(key)) +
|
221
|
+
form.label(
|
222
|
+
"preferred_#{key}",
|
223
|
+
Spree.t(key, scope: i18n_scope),
|
224
|
+
class: 'custom-control-label',
|
225
|
+
id: [object.class.to_s.parameterize, 'preference', key].join('-')
|
226
|
+
)
|
229
227
|
end
|
228
|
+
else
|
229
|
+
content_tag(:div, form.label("preferred_#{key}", Spree.t(key, scope: i18n_scope)) +
|
230
|
+
preference_field_for(form, "preferred_#{key}", type: object.preference_type(key)),
|
231
|
+
class: 'form-group', id: [object.class.to_s.parameterize, 'preference', key].join('-'))
|
230
232
|
end
|
231
233
|
end
|
232
|
-
safe_join(fields)
|
233
234
|
end
|
234
235
|
|
235
236
|
def spree_dom_id(record)
|
@@ -51,7 +51,13 @@ module Spree
|
|
51
51
|
options[:class] ||= 'btn btn-light'
|
52
52
|
|
53
53
|
if options[:icon]
|
54
|
-
|
54
|
+
if options[:only_icon]
|
55
|
+
options[:title] = text
|
56
|
+
text = icon(options[:icon], class: 'mr-0')
|
57
|
+
options[:class] += ' with-tip'
|
58
|
+
else
|
59
|
+
text = icon(options[:icon]) + ' ' + text
|
60
|
+
end
|
55
61
|
end
|
56
62
|
|
57
63
|
content_tag :span, data: { toggle: 'modal', target: '#bulk-modal' } do
|
@@ -76,7 +82,7 @@ module Spree
|
|
76
82
|
# render a counter for the bulk operations
|
77
83
|
# @return [String]
|
78
84
|
def bulk_operations_counter
|
79
|
-
content_tag(:span, class: 'bulk-operations-counter
|
85
|
+
content_tag(:span, class: 'bulk-operations-counter') do
|
80
86
|
content_tag(:strong, '', data: { bulk_operation_target: 'counter' }) +
|
81
87
|
Spree.t("admin.selected")
|
82
88
|
end
|
@@ -20,7 +20,7 @@ module Spree
|
|
20
20
|
# render a discard button for the modal
|
21
21
|
# @return [String]
|
22
22
|
def modal_discard_button
|
23
|
-
button_tag(type: 'button', class: 'btn btn-light', data: { dismiss: 'modal' }) do
|
23
|
+
button_tag(type: 'button', class: 'btn btn-light mr-auto', data: { dismiss: 'modal' }) do
|
24
24
|
Spree.t('actions.discard')
|
25
25
|
end.html_safe
|
26
26
|
end
|
@@ -52,11 +52,9 @@ module Spree
|
|
52
52
|
# @param per_page [Integer] the number of items per page
|
53
53
|
# @return [Hash] the params to apply per page
|
54
54
|
def per_page_dropdown_params(per_page)
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
args.merge!(per_page: per_page)
|
59
|
-
args
|
55
|
+
# Keep only safe query params that should survive pagination changes
|
56
|
+
safe_params = request.query_parameters.slice(:q)
|
57
|
+
safe_params.merge(per_page: per_page, page: nil)
|
60
58
|
end
|
61
59
|
|
62
60
|
# render a button link to edit a resource
|
@@ -268,6 +266,14 @@ module Spree
|
|
268
266
|
css ||= 'text-muted'
|
269
267
|
content_tag :small, icon('info-square-rounded', class: css), data: { placement: placement }, class: "with-tip #{css}", title: text
|
270
268
|
end
|
269
|
+
|
270
|
+
def render_breadcrumb_icon
|
271
|
+
if settings_active?
|
272
|
+
icon('settings')
|
273
|
+
elsif @breadcrumb_icon
|
274
|
+
icon(@breadcrumb_icon)
|
275
|
+
end
|
276
|
+
end
|
271
277
|
end
|
272
278
|
end
|
273
279
|
end
|
@@ -57,7 +57,7 @@ module Spree
|
|
57
57
|
# lazy loading other models here (via includes) may result in an invalid query
|
58
58
|
# e.g. SELECT DISTINCT DISTINCT "spree_orders".id, "spree_orders"."created_at" AS alias_0 FROM "spree_orders"
|
59
59
|
# see https://github.com/spree/spree/pull/3919
|
60
|
-
@orders = @search.result(distinct: true).page(params[:page]).per(params[:per_page]
|
60
|
+
@orders = @search.result(distinct: true).page(params[:page]).per(params[:per_page])
|
61
61
|
end
|
62
62
|
|
63
63
|
def load_user
|
@@ -25,10 +25,8 @@ module Spree
|
|
25
25
|
icon('credit-card-refund') + Spree.t('payment_states.refunded')
|
26
26
|
elsif order.partially_refunded?
|
27
27
|
icon('credit-card-refund') + Spree.t('payment_states.partially_refunded')
|
28
|
-
elsif order.payment_state == 'failed'
|
28
|
+
elsif order.payment_state == 'failed' || order.payment_state == 'void'
|
29
29
|
icon('cancel') + Spree.t('payment_states.failed')
|
30
|
-
elsif order.payment_state == 'void'
|
31
|
-
icon('cancel') + Spree.t('payment_states.void')
|
32
30
|
elsif order.payment_state == 'paid'
|
33
31
|
icon('check') + Spree.t('payment_states.paid')
|
34
32
|
else
|
@@ -11,6 +11,11 @@ module Spree
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
+
def payment_method_icon_tag(payment_method, opts = {})
|
15
|
+
image_tag "payment_icons/#{payment_method}.svg", opts
|
16
|
+
rescue Sprockets::Rails::Helper::AssetNotFound
|
17
|
+
end
|
18
|
+
|
14
19
|
def available_payment_methods
|
15
20
|
@available_payment_methods ||= Spree::PaymentMethod.providers.map { |provider| provider.name.constantize.new }.delete_if { |payment_method| !payment_method.show_in_admin? || current_store.payment_methods.pluck(:type).include?(payment_method.type) }.sort_by(&:name)
|
16
21
|
end
|
@@ -7,7 +7,7 @@ module Spree
|
|
7
7
|
|
8
8
|
def store_uploaded_asset_in_session(asset)
|
9
9
|
ensure_session_uploaded_assets_uuid
|
10
|
-
asset.update(
|
10
|
+
asset.update(session_id: session['spree.admin.uploaded_assets.uuid'])
|
11
11
|
end
|
12
12
|
|
13
13
|
def session_uploaded_assets
|
@@ -4,7 +4,7 @@ module Spree
|
|
4
4
|
include Spree::ImagesHelper
|
5
5
|
|
6
6
|
def available_stores
|
7
|
-
@available_stores ||= Spree::Store.accessible_by(current_ability)
|
7
|
+
@available_stores ||= Spree::Store.accessible_by(current_ability).includes(:logo_attachment, :favicon_image_attachment, :default_custom_domain)
|
8
8
|
end
|
9
9
|
|
10
10
|
DEFAULT_ICON_SIZE = 40
|
@@ -36,23 +36,6 @@ module Spree
|
|
36
36
|
opts[:class] += ' rounded text-dark d-flex align-items-center justify-content-center bg-gray-200'
|
37
37
|
content_tag(:span, name[0].upcase, class: opts[:class], style: "height: #{opts[:height]}px; width: #{opts[:width]}px;")
|
38
38
|
end
|
39
|
-
|
40
|
-
def store_logo(store = nil, options = {})
|
41
|
-
store ||= current_store
|
42
|
-
return unless store
|
43
|
-
|
44
|
-
opts = { width: 30, height: 30, crop: :fit, quality: :auto, fetch_format: :auto, alt: store.name, title: store.name, class: 'with-tip' }
|
45
|
-
opts.merge!(options)
|
46
|
-
|
47
|
-
if store.is_a?(Spree::Store) && store.logo&.attached? && store.logo&.variable?
|
48
|
-
spree_image_tag(store.logo, class: opts[:class], width: opts[:width], height: opts[:height])
|
49
|
-
else
|
50
|
-
initials = store.name.split.map(&:first).join.upcase
|
51
|
-
content_tag(:div, initials, class: "avatar rounded with-tip bg-light",
|
52
|
-
style: "width: #{opts[:height]}px; height: #{opts[:height]}px;",
|
53
|
-
title: store.name)
|
54
|
-
end
|
55
|
-
end
|
56
39
|
end
|
57
40
|
end
|
58
41
|
end
|
@@ -12,7 +12,7 @@ module Spree
|
|
12
12
|
def post_tags_scope
|
13
13
|
@post_tags_scope ||= ActsAsTaggableOn::Tag.
|
14
14
|
joins(:taggings).
|
15
|
-
where(
|
15
|
+
where(ActsAsTaggableOn.taggings_table => { taggable_type: 'Spree::Post' }).
|
16
16
|
for_context(:tags).for_tenant(current_store.id)
|
17
17
|
end
|
18
18
|
|
@@ -23,7 +23,7 @@ module Spree
|
|
23
23
|
def user_tags_scope
|
24
24
|
@user_tags_scope ||= ActsAsTaggableOn::Tag.
|
25
25
|
joins(:taggings).
|
26
|
-
where(
|
26
|
+
where(ActsAsTaggableOn.taggings_table => { taggable_type: Spree.user_class.to_s }).
|
27
27
|
for_context(:tags)
|
28
28
|
end
|
29
29
|
|
@@ -80,6 +80,7 @@ import UnitSystemController from 'spree/admin/controllers/unit_system_controller
|
|
80
80
|
import VariantsFormController from 'spree/admin/controllers/variants_form_controller'
|
81
81
|
import AddressAutocompleteController from 'spree/core/controllers/address_autocomplete_controller'
|
82
82
|
import AddressFormController from 'spree/core/controllers/address_form_controller'
|
83
|
+
import DisableSubmitButtonController from 'spree/core/controllers/disable_submit_button_controller'
|
83
84
|
import EnableButtonController from 'spree/core/controllers/enable_button_controller'
|
84
85
|
|
85
86
|
application.register('active-storage-upload', ActiveStorageUpload)
|
@@ -98,6 +99,7 @@ application.register('checkbox-select-all', CheckboxSelectAll)
|
|
98
99
|
application.register('clipboard', Clipboard)
|
99
100
|
application.register('color-palette', ColorPaletteController)
|
100
101
|
application.register('color-picker', ColorPickerController)
|
102
|
+
application.register('disable-submit-button', DisableSubmitButtonController)
|
101
103
|
application.register('enable-button', EnableButtonController)
|
102
104
|
application.register('filters', FiltersController)
|
103
105
|
application.register('font-picker', FontPickerController)
|
@@ -29,8 +29,7 @@ export default class extends Controller {
|
|
29
29
|
})
|
30
30
|
|
31
31
|
this.uppy.use(ActiveStorageUpload, {
|
32
|
-
directUploadUrl: document.querySelector("meta[name='direct-upload-url']").getAttribute('content')
|
33
|
-
crop: this.cropValue
|
32
|
+
directUploadUrl: document.querySelector("meta[name='direct-upload-url']").getAttribute('content')
|
34
33
|
})
|
35
34
|
|
36
35
|
let dashboardOptions = {}
|
@@ -56,6 +55,16 @@ export default class extends Controller {
|
|
56
55
|
|
57
56
|
this.uppy.on('file-editor:complete', (updatedFile) => {
|
58
57
|
console.log('File editing complete:', updatedFile)
|
58
|
+
// Remove the old file from Uppy's file list
|
59
|
+
this.uppy.removeFile(updatedFile.id)
|
60
|
+
// Add the updated file to Uppy
|
61
|
+
this.uppy.addFile({
|
62
|
+
name: updatedFile.name,
|
63
|
+
type: updatedFile.type,
|
64
|
+
data: updatedFile.data,
|
65
|
+
source: 'local',
|
66
|
+
isRemote: false
|
67
|
+
})
|
59
68
|
|
60
69
|
this.handleUI(updatedFile)
|
61
70
|
|
@@ -26,9 +26,8 @@ export default class extends Controller {
|
|
26
26
|
values() {
|
27
27
|
return this.selectTargets
|
28
28
|
.map((selectTarget) => selectTarget.querySelector('select'))
|
29
|
-
.map((select) => select.options[select.selectedIndex])
|
30
|
-
.filter((
|
31
|
-
.map((option) => ({ text: option.text, value: option.value}))
|
29
|
+
.map((select) => select.options[select.selectedIndex].text)
|
30
|
+
.filter((text) => text?.length > 0)
|
32
31
|
}
|
33
32
|
|
34
33
|
setValues() {
|
@@ -129,7 +129,7 @@ export default class extends CheckboxSelectAll {
|
|
129
129
|
const nestingLevel = internalName.split('/').length
|
130
130
|
if (nestingLevel === 1) {
|
131
131
|
const firstOptionKey = Object.keys(this.optionsValue)[0]
|
132
|
-
const newOptionValues = this.optionsValue[firstOptionKey].values.filter((value) => value
|
132
|
+
const newOptionValues = this.optionsValue[firstOptionKey].values.filter((value) => value !== internalName)
|
133
133
|
if (newOptionValues.length === 0) {
|
134
134
|
const newOptionsValue = this.optionsValue
|
135
135
|
delete newOptionsValue[firstOptionKey]
|
@@ -265,12 +265,12 @@ export default class extends CheckboxSelectAll {
|
|
265
265
|
let name = ''
|
266
266
|
let internalName = name
|
267
267
|
if (i === 0) {
|
268
|
-
name = variant[keys[i]]
|
268
|
+
name = variant[keys[i]]
|
269
269
|
internalName = name
|
270
270
|
} else {
|
271
|
-
const namesPath = keys.slice(1, keys.length).map((key) => variant[key]
|
271
|
+
const namesPath = keys.slice(1, keys.length).map((key) => variant[key])
|
272
272
|
name = namesPath.join(' / ')
|
273
|
-
internalName = `${variant[keys[0]]
|
273
|
+
internalName = `${variant[keys[0]]}/${namesPath.join('/')}`
|
274
274
|
}
|
275
275
|
|
276
276
|
return { name, internalName }
|
@@ -495,7 +495,7 @@ export default class extends CheckboxSelectAll {
|
|
495
495
|
const variantEditButton = variantTarget.querySelector('[data-slot="variantEditButton"]')
|
496
496
|
|
497
497
|
if (variantEditButton) {
|
498
|
-
variantEditButton.href =
|
498
|
+
variantEditButton.href = `/admin/products/${this.productIdValue}/variants/${variantId}/edit`
|
499
499
|
variantEditButton.classList.remove('invisible')
|
500
500
|
}
|
501
501
|
}
|
@@ -572,12 +572,12 @@ export default class extends CheckboxSelectAll {
|
|
572
572
|
refreshParentInputs() {
|
573
573
|
const firstOption = Object.values(this.optionsValue)[0]
|
574
574
|
if (firstOption) {
|
575
|
-
firstOption.values.forEach((
|
575
|
+
firstOption.values.forEach((name) => {
|
576
576
|
this.currenciesValue.forEach((currency) => {
|
577
|
-
this.updateParentPriceRange(
|
577
|
+
this.updateParentPriceRange(name, currency)
|
578
578
|
})
|
579
579
|
this.stockLocationsValue.forEach((stockLocationId) => {
|
580
|
-
this.updateParentStockSum(
|
580
|
+
this.updateParentStockSum(name, stockLocationId)
|
581
581
|
})
|
582
582
|
this.updateShopLocationCountOnHand()
|
583
583
|
})
|
@@ -615,17 +615,11 @@ export default class extends CheckboxSelectAll {
|
|
615
615
|
.find((option) => option.name === key).position
|
616
616
|
inputs.push(positionInput)
|
617
617
|
|
618
|
-
const
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
inputs.push(
|
623
|
-
|
624
|
-
const optionIdInput = document.createElement('input')
|
625
|
-
optionIdInput.type = 'hidden'
|
626
|
-
optionIdInput.name = `product[variants_attributes][${i}][options][][option_value_presentation]`
|
627
|
-
optionIdInput.value = variant[key].text
|
628
|
-
inputs.push(optionIdInput)
|
618
|
+
const valueInput = document.createElement('input')
|
619
|
+
valueInput.type = 'hidden'
|
620
|
+
valueInput.name = `product[variants_attributes][${i}][options][][value]`
|
621
|
+
valueInput.value = variant[key]
|
622
|
+
inputs.push(valueInput)
|
629
623
|
})
|
630
624
|
|
631
625
|
return inputs
|
@@ -930,8 +924,8 @@ export default class extends CheckboxSelectAll {
|
|
930
924
|
const optionValuesSelectContainer = template.querySelector('[data-slot="optionValuesSelectContainer"]')
|
931
925
|
const tomSelectOptionValues = optionValues.map((optionValue) => {
|
932
926
|
return {
|
933
|
-
id: optionValue
|
934
|
-
name: optionValue
|
927
|
+
id: availableOptions.find((availableOption) => availableOption.name === optionValue)?.id,
|
928
|
+
name: optionValue
|
935
929
|
}
|
936
930
|
})
|
937
931
|
|
@@ -954,8 +948,8 @@ export default class extends CheckboxSelectAll {
|
|
954
948
|
values.forEach((value) => {
|
955
949
|
const template = this.optionValueTemplateTarget.content.cloneNode(true)
|
956
950
|
const optionValueNameEl = template.querySelector('[data-slot="optionValueName"]')
|
957
|
-
optionValueNameEl.textContent = value
|
958
|
-
optionValueNameEl.dataset.name = value
|
951
|
+
optionValueNameEl.textContent = value
|
952
|
+
optionValueNameEl.dataset.name = value
|
959
953
|
|
960
954
|
templates.push(template)
|
961
955
|
})
|