diff --git a/api/lib/spree/api_configuration.rb b/api/lib/spree/api_configuration.rb index 2dce13e62d8..d3cfba0a6fb 100644 --- a/api/lib/spree/api_configuration.rb +++ b/api/lib/spree/api_configuration.rb @@ -7,7 +7,7 @@ class ApiConfiguration < Preferences::Configuration preference :product_attributes, :array, default: [ :id, :name, :description, :available_on, :slug, :meta_description, :meta_keywords, :shipping_category_id, - :taxon_ids, :total_on_hand, :meta_title + :taxon_ids, :total_on_hand, :meta_title, :primary_breadcrumb_taxon_id ] preference :product_property_attributes, :array, default: [:id, :product_id, :property_id, :value, :property_name] diff --git a/api/spec/requests/spree/api/products_spec.rb b/api/spec/requests/spree/api/products_spec.rb index 6554f419f1f..5e63321004b 100644 --- a/api/spec/requests/spree/api/products_spec.rb +++ b/api/spec/requests/spree/api/products_spec.rb @@ -316,6 +316,13 @@ module Spree::Api expect(json_response["taxon_ids"]).to eq([taxon_1.id]) end + it "puts primary breadcrumb taxon for the product" do + product_data[:primary_breadcrumb_taxon_id] = taxon_1.id.to_s + post spree.api_products_path, params: { product: product_data } + + expect(json_response["primary_breadcrumb_taxon_id"]).to eq(taxon_1.id) + end + # Regression test for https://github.com/spree/spree/issues/4123 it "puts the created product in the given taxons" do product_data[:taxon_ids] = [taxon_1.id, taxon_2.id].join(',') @@ -404,6 +411,13 @@ module Spree::Api expect(json_response["taxon_ids"]).to eq([taxon_1.id]) end + it "puts primary breadcrumb taxon for the updated product" do + product.primary_breadcrumb_taxon_id = taxon_2.id + put spree.api_product_path(product), params: { product: { primary_breadcrumb_taxon_id: taxon_1.id } } + + expect(json_response["primary_breadcrumb_taxon_id"]).to eq(taxon_1.id) + end + # Regression test for https://github.com/spree/spree/issues/4123 it "puts the created product in the given taxons" do put spree.api_product_path(product), params: { product: { taxon_ids: [taxon_1.id, taxon_2.id].join(',') } } diff --git a/backend/app/assets/javascripts/spree/backend/taxon_autocomplete.js b/backend/app/assets/javascripts/spree/backend/taxon_autocomplete.js index e47e4594a22..4c9c2c5eab5 100644 --- a/backend/app/assets/javascripts/spree/backend/taxon_autocomplete.js +++ b/backend/app/assets/javascripts/spree/backend/taxon_autocomplete.js @@ -1,25 +1,49 @@ -$.fn.taxonAutocomplete = function () { +$.fn.autocompleteTaxon = function (options) { 'use strict'; + var defaultOptions = { + multiple: true, + placeholder: Spree.translations.taxon_placeholder + }; + + options = $.extend({}, defaultOptions, options); + this.select2({ - placeholder: Spree.translations.taxon_placeholder, - multiple: true, + placeholder: options.placeholder, + multiple: options.multiple, initSelection: function (element, callback) { - var ids = element.val(), - count = ids.split(",").length; - - Spree.ajax({ - type: "GET", - url: Spree.pathFor('api/taxons'), - data: { - ids: ids, - per_page: count, - without_children: true - }, - success: function (data) { - callback(data['taxons']); - } - }); + var ids = element.val(); + + if (options.multiple) { + var count = ids.split(",").length; + + Spree.ajax({ + type: "GET", + url: Spree.pathFor('api/taxons'), + data: { + ids: ids, + per_page: count, + without_children: true + }, + success: function (data) { + callback(data['taxons']); + } + }); + } else { + + Spree.ajax({ + type: "GET", + url: Spree.pathFor('api/taxons'), + data: { + ids: ids, + per_page: 1, + without_children: true + }, + success: function (data) { + callback(data['taxons'][0]); + } + }); + } }, ajax: { url: Spree.pathFor('api/taxons'), @@ -53,5 +77,11 @@ $.fn.taxonAutocomplete = function () { }; Spree.ready(function () { - $('#product_taxon_ids, .taxon_picker').taxonAutocomplete(); + $('#product_taxon_ids, .taxon_picker').autocompleteTaxon({ + multiple: true, + }); + + $('#product_primary_breadcrumb_taxon_id').autocompleteTaxon({ + multiple: false, + }); }); diff --git a/backend/app/views/spree/admin/products/_form.html.erb b/backend/app/views/spree/admin/products/_form.html.erb index a8b2ec4bbd1..b4b302635ea 100644 --- a/backend/app/views/spree/admin/products/_form.html.erb +++ b/backend/app/views/spree/admin/products/_form.html.erb @@ -36,6 +36,13 @@ <% end %> +