spree_backend 4.3.0.rc3 → 4.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 79ca40c018802153b873f59a98ec2707b28121385864e9e6775cf046d89030d2
4
- data.tar.gz: 11af2a95c3a987495d29c75e7c44377b719df1fb138946e29bda7d911fce45ac
3
+ metadata.gz: fd79c7d41af70e530135379477cad943762adefcda2c0069b061401a80aa1cb8
4
+ data.tar.gz: d382525f3b1cbbda22a0e01c75ec3eb650e9ee229a5fbe05d1b9bd52442137fa
5
5
  SHA512:
6
- metadata.gz: 42b3e7abd694167ebe63a3e5c514b74fd81435c8d8f0a2bffa8173ab9fbd279d1970d92617e2e3869e3397112d664eaa82b83467c83c10eb2515b5e1f919c699
7
- data.tar.gz: 823383c304a701fd5811e07aa6ef4f036659bd778dad0287ddd4c8abf0e9d17a4d8d9b7c4ee50127d48c1973947265b74b444caeb03f2af8c32d13dfc6245a0c
6
+ metadata.gz: 9420ad664486b5a2fbb73ee87d5eeaf2d176f6e476f872405db17d0ca7a0251e9140500807778db46868e66dd145294edc13d2aa5d56db9cb51dca25db284db6
7
+ data.tar.gz: 133e906040edfda99ec1495d1a04d59e339cf250d85694d6ed175aa2f06d78b7558ce502b6ba3359301fec0533d5323ea643ef9024334024e71d08450ddab930
@@ -1,37 +1,25 @@
1
1
  // SELECT2 AUTOCOMPLETE JS
2
- // This JavaScript file allows Spree developers to set up Select2 autocomplete search
3
- // using the API v2 by simply adding data attributes to a select element with the class: 'select2autocomplete'
4
- // as shown here: <select class="select2autocomplete"></select>.
2
+ // The JavaScript in this file allows Spree developers to set up Select2 autocomplete search
3
+ // using the API v2 by simply adding data attributes to a select element.
5
4
 
6
5
  // REQUIRED ATTRIBUTES
7
- // You must provide a URL for the API V2, use the format shown below.
8
- // See the backend.js file for other API V2 URL's.
9
- //
10
- // Example:
6
+ // You must provide a URL for the API V2, use the format shown below. See backend.js for other API V2 URL's.
7
+ // REQUIRED:
11
8
  // data-autocomplete-url-value="products_api_v2"
12
9
 
13
- // OPTIONAL ATTRIBUTES
14
- // These optional attributes have sensible defaults, you many not need to use them in many cases,
15
- // but they do provide a powerful toolkit to refine your autocomplete search as required.
16
- //
17
- // Examples:
18
- // data-autocomplete-placeholder-value="Seach Pages" <- Sets the placeholder | DEFAULT is: 'Search'
19
- // data-autocomplete-clear-value="boolean" <- Allow select2 to be cleared | DEFAULT is: false (no clear button)
20
- // data-autocomplete-multiple-value="boolean" <- Multiple or Single select | DEFAULT is: false (single)
21
- // data-autocomplete-return-attr-value="pretty_name" <- Return Attribute. | DEFAULT is: 'name'
22
- // data-autocomplete-min-input-value="4" <- Minimum input for search | DEFAULT is: 3
23
- // data-autocomplete-search-query-value="title_i_cont" <- Custom search query | DEFAULT is: 'name_i_cont'
24
- // data-autocomplete-custom-return-id-value="permalink" <- Return a custom attribute rather than the ID | DEFAULT: returns id
10
+ // OPTIONAL:
11
+ // data-autocomplete-placeholder-value="Seach Pages" <- Sets the placeholder | DEFAULT is: 'Search'.
12
+ // data-autocomplete-clear-value=boolean <- Allow select2 to be cleared | DEFAULT is: false (no clear button).
13
+ // data-autocomplete-multiple-value=boolean <- Multiple or Single select | DEFAULT is: false (single).
14
+ // data-autocomplete-return-attr-value="pretty_name" <- Return Attribute. | DEFAULT is: 'name'.
15
+ // data-autocomplete-min-input-value="4" <- Minimum input for search | DEFAULT is: 3.
16
+ // data-autocomplete-search-query-value="title_i_cont" <- Custom search query | DEFAULT is: 'name_i_cont'.
17
+ // data-autocomplete-custom-return-id-value="permalink" <- Return a custom attribute | DEFAULT: returns id.
18
+ // data-autocomplete-debug-mode-value=boolean <- Turn on console loggin of data returned by the request.
25
19
  //
26
- // SECOND HARD CODED FILTER - (OPTIONAL)
27
- // Use a second hard coded search filter param and term if you require a little more curation
28
- // than just all results returning, an example of this in use can be seen in the menu_item search for Pages,
29
- // here we only want to retuen Pages that have linkable slugs, not homepages, and so we filter those using the
30
- // data attributes shown below.
31
- //
32
- // Examples:
33
- // data-autocomplete-additional-query-value="type_not_eq" <- Additional hard coded query | DEFAULT: null (not used)
34
- // data-autocomplete-additional-term-value="Spree::Cms::Pages::Homepage" <- Additional hard coded term | DEFAULT: null (not used)
20
+ // Add your own custom URL params to the request as needed
21
+ // EXAMPLE:
22
+ // data-autocomplete-additional-url-params-value="filter[type_not_eq]=Spree::Cms::Pages::Homepage"
35
23
 
36
24
  document.addEventListener('DOMContentLoaded', function() {
37
25
  loadAutoCompleteParams()
@@ -45,10 +33,7 @@ function loadAutoCompleteParams() {
45
33
 
46
34
  function buildParamsFromDataAttrs(element) {
47
35
  $(element).select2Autocomplete({
48
- // Required Attributes
49
36
  apiUrl: Spree.routes[element.dataset.autocompleteUrlValue],
50
-
51
- // Optional Attributes
52
37
  placeholder: element.dataset.autocompletePlaceholderValue,
53
38
  allow_clear: element.dataset.autocompleteClearValue,
54
39
  multiple: element.dataset.autocompleteMultipleValue,
@@ -56,21 +41,17 @@ function buildParamsFromDataAttrs(element) {
56
41
  minimum_input: element.dataset.autocompleteMinInputValue,
57
42
  search_query: element.dataset.autocompleteSearchQueryValue,
58
43
  custom_return_id: element.dataset.autocompleteCustomReturnIdValue,
59
-
60
- // Hard coded additional filter for those edge cases.
61
- additional_query: element.dataset.autocompleteAdditionalQueryValue,
62
- additional_term: element.dataset.autocompleteAdditionalTermValue
44
+ additional_url_params: element.dataset.autocompleteAdditionalUrlParamsValue,
45
+ debug_mode: element.dataset.autocompleteDebugModeValue
63
46
  })
64
47
  }
65
48
 
66
- // Can also be called directly as javastript.
67
49
  $.fn.select2Autocomplete = function(params) {
68
- // Required params
69
- const apiUrl = params.apiUrl || null
70
- const resourcePlural = apiUrl.match(/([^/]*)\/*$/)[1]
71
- const resourceSingular = resourcePlural.slice(0, -1)
50
+ let apiUrl = null
51
+ let returnedFields
72
52
 
73
- // Optional Params
53
+ const resourcePlural = params.apiUrl.match(/([^/]*)\/*$/)[1]
54
+ const resourceSingular = resourcePlural.slice(0, -1)
74
55
  const select2placeHolder = params.placeholder || Spree.translations.search
75
56
  const select2Multiple = params.multiple || false
76
57
  const select2allowClear = params.allow_clear || false
@@ -78,9 +59,32 @@ $.fn.select2Autocomplete = function(params) {
78
59
  const minimumInput = params.minimum_input || 3
79
60
  const searchQuery = params.search_query || 'name_i_cont'
80
61
  const customReturnId = params.custom_return_id || null
81
- const additionalQuery = params.additional_query || null
82
- const additionalTerm = params.additional_term || null
62
+ const additionalUrlParams = params.additional_url_params || null
63
+ const DebugMode = params.debug_mode || null
64
+
65
+ //
66
+ // Set up a clean URL for sparseFields
67
+ if (customReturnId == null) {
68
+ returnedFields = returnAttribute
69
+ } else {
70
+ returnedFields = `${returnAttribute},${customReturnId}`
71
+ }
72
+ const sparseFields = `fields[${resourceSingular}]=${returnedFields}`
73
+
74
+ //
75
+ // Set up a clean URL for Additional URL Params
76
+ if (additionalUrlParams != null) {
77
+ // URL + Additional URL Params + Sparse Fields
78
+ apiUrl = `${params.apiUrl}?${additionalUrlParams}&${sparseFields}`
79
+ } else {
80
+ // URL + Sparse Fields (the default response for a noraml Select2)
81
+ apiUrl = `${params.apiUrl}?${sparseFields}`
82
+ }
83
83
 
84
+ if (DebugMode != null) console.log('Request URL:' + apiUrl)
85
+
86
+ //
87
+ // Format the returned values.
84
88
  function formatList(values) {
85
89
  if (customReturnId) {
86
90
  return values.map(function(obj) {
@@ -99,58 +103,30 @@ $.fn.select2Autocomplete = function(params) {
99
103
  }
100
104
  }
101
105
 
102
- if (additionalQuery == null && additionalTerm == null) {
103
- this.select2({
104
- multiple: select2Multiple,
105
- allowClear: select2allowClear,
106
- placeholder: select2placeHolder,
107
- minimumInputLength: minimumInput,
108
- ajax: {
109
- url: apiUrl,
110
- headers: Spree.apiV2Authentication(),
111
- data: function(params) {
112
- return {
113
- fields: {
114
- [resourceSingular]: returnAttribute
115
- },
116
- filter: {
117
- [searchQuery]: params.term
118
- }
119
- }
120
- },
121
- processResults: function(json) {
122
- return {
123
- results: formatList(json.data)
106
+ //
107
+ // Set-up Select2 and make AJAX request.
108
+ this.select2({
109
+ multiple: select2Multiple,
110
+ allowClear: select2allowClear,
111
+ placeholder: select2placeHolder,
112
+ minimumInputLength: minimumInput,
113
+ ajax: {
114
+ url: apiUrl,
115
+ headers: Spree.apiV2Authentication(),
116
+ data: function(params) {
117
+ return {
118
+ filter: {
119
+ [searchQuery]: params.term
124
120
  }
125
121
  }
126
- }
127
- })
128
- } else {
129
- this.select2({
130
- multiple: select2Multiple,
131
- allowClear: select2allowClear,
132
- placeholder: select2placeHolder,
133
- minimumInputLength: minimumInput,
134
- ajax: {
135
- url: apiUrl,
136
- headers: Spree.apiV2Authentication(),
137
- data: function(params) {
138
- return {
139
- fields: {
140
- [resourceSingular]: returnAttribute
141
- },
142
- filter: {
143
- [searchQuery]: params.term,
144
- [additionalQuery]: additionalTerm
145
- }
146
- }
147
- },
148
- processResults: function(json) {
149
- return {
150
- results: formatList(json.data)
151
- }
122
+ },
123
+ processResults: function(json) {
124
+ if (DebugMode != null) console.log(json)
125
+
126
+ return {
127
+ results: formatList(json.data)
152
128
  }
153
129
  }
154
- })
155
- }
130
+ }
131
+ })
156
132
  }
@@ -1,11 +1,9 @@
1
1
  /**
2
2
  populateSelectOptionsFromApi(params)
3
+ Allows you to easily fetch data from API (Platfrom v2) and populate an empty <select> with <option> tags, including a selected <option> tag.
3
4
 
4
- Allows you to easily fetch data from API (Platfrom v2)
5
- and populate an empty <select> with <option> tags,
6
- including a selected <option> tag.
7
-
8
- ## EXAMPLE USE CASE called from ERB view file:
5
+ ## EXAMPLE A
6
+ # Populating a list of all taxons including a selected item
9
7
 
10
8
  populateSelectOptionsFromApi({
11
9
  targetElement: '#mySelectElement',
@@ -16,6 +14,24 @@
16
14
  selectedOption: <%= @menu_item.linked_resource_id %>
17
15
  <% end %>
18
16
  })
17
+
18
+ ## EXAMPLE B
19
+ # Populating a single selected item using filter and returning an attribute other than the ID
20
+
21
+ <% if resource.link_one.present? %>
22
+ <script>
23
+ populateSelectOptionsFromApi({
24
+ targetElement: "#<%= save_to %>Select2",
25
+ apiUrl: Spree.routes.taxons_api_v2 + "?filter[permalink_matches]=<%= resource.send(save_to) %>",
26
+ returnValueFromAttributes: 'permalink',
27
+ returnOptionText: 'pretty_name',
28
+
29
+ <% if resource.send(save_to) %>
30
+ selectedOption: "<%= resource.send(save_to) %>"
31
+ <% end %>
32
+ })
33
+ </script>
34
+ <% end %>
19
35
  **/
20
36
 
21
37
  // eslint-disable-next-line no-unused-vars
@@ -32,30 +48,40 @@ const handleErrors = function(response) {
32
48
  const createRequest = function(params, succeed, fail) {
33
49
  const targetElement = params.targetElement
34
50
  const apiUrl = params.apiUrl
35
- const returnAttribute = params.returnAttribute
51
+ const returnOptionText = params.returnOptionText
52
+ const returnValueFromAttributes = params.returnValueFromAttributes || null
36
53
  const selectedOption = params.selectedOption
37
54
  const selectEl = document.querySelector(targetElement)
38
55
 
39
56
  fetch(apiUrl, { headers: Spree.apiV2Authentication() })
40
57
  .then((response) => handleErrors(response))
41
- .then((json) => succeed(json.data, returnAttribute, selectEl, selectedOption))
58
+ .then((json) => succeed(json.data, returnValueFromAttributes, returnOptionText, selectEl, selectedOption))
42
59
  .catch((error) => fail(error, selectEl))
43
60
  }
44
61
 
45
- const updateSelectSuccess = function(parsedData, returnAttribute, selectEl, selectedOption) {
62
+ const updateSelectSuccess = function(parsedData, returnValueFromAttributes, returnOptionText, selectEl, selectedOption) {
63
+ const selectedOpt = selectEl.querySelector('option[selected]')
64
+
46
65
  parsedData.forEach((object) => {
47
66
  const optionEl = document.createElement('option')
48
- optionEl.value = object.id
49
- optionEl.innerHTML = object.attributes[returnAttribute]
50
67
 
51
- if (parseInt(selectedOption, 10) === parseInt(object.id, 10)) optionEl.selected = true
68
+ if (returnValueFromAttributes == null) {
69
+ optionEl.value = object.id
70
+ if (parseInt(selectedOption, 10) === parseInt(object.id, 10)) optionEl.selected = true
71
+ } else {
72
+ optionEl.value = object.attributes[returnValueFromAttributes]
73
+ if (selectedOpt.value === object.attributes[returnValueFromAttributes]) {
74
+ selectedOpt.remove()
75
+
76
+ optionEl.setAttribute('selected', 'selected')
77
+ }
78
+ }
52
79
 
80
+ optionEl.innerHTML = object.attributes[returnOptionText]
53
81
  selectEl.appendChild(optionEl)
54
82
  })
55
83
  }
56
84
 
57
85
  const updateSelectError = function(error, selectEl) {
58
- selectEl.disabled = true
59
-
60
86
  console.log(error)
61
87
  }
@@ -37,6 +37,10 @@ div.admin-product-image-container {
37
37
  justify-content: center;
38
38
  margin: auto;
39
39
 
40
+ a {
41
+ display: flex
42
+ }
43
+
40
44
  img {
41
45
  max-width: 100%;
42
46
  height: auto;
@@ -1,10 +1,7 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class ImagesController < ResourceController
4
- include Spree::Admin::ProductConcern
5
-
6
- belongs_to 'spree/product', find_by: :slug
7
-
4
+ before_action :load_product
8
5
  before_action :load_edit_data, except: :index
9
6
 
10
7
  create.before :set_viewable
@@ -13,24 +10,44 @@ module Spree
13
10
  private
14
11
 
15
12
  def location_after_destroy
16
- spree.admin_product_images_url(parent)
13
+ spree.admin_product_images_url(@product)
17
14
  end
18
15
 
19
16
  def location_after_save
20
- spree.admin_product_images_url(parent)
17
+ spree.admin_product_images_url(@product)
21
18
  end
22
19
 
23
20
  def load_edit_data
24
- @variants = parent.variants.map do |variant|
21
+ @variants = @product.variants.map do |variant|
25
22
  [variant.sku_and_options_text, variant.id]
26
23
  end
27
- @variants.insert(0, [Spree.t(:all), parent.master.id])
24
+ @variants.insert(0, [Spree.t(:all), @product.master_id])
28
25
  end
29
26
 
30
27
  def set_viewable
31
28
  @image.viewable_type = 'Spree::Variant'
32
29
  @image.viewable_id = params[:image][:viewable_id]
33
30
  end
31
+
32
+ def load_product
33
+ @product = scope.friendly.find(params[:product_id])
34
+ end
35
+
36
+ def scope
37
+ current_store.products
38
+ end
39
+
40
+ def collection_url
41
+ spree.admin_product_images_url
42
+ end
43
+
44
+ def modle_class
45
+ Spree::Image
46
+ end
47
+
48
+ def collection
49
+ @collection ||= load_product.variant_images
50
+ end
34
51
  end
35
52
  end
36
53
  end
@@ -37,10 +37,9 @@
37
37
  <%= image_tag main_app.url_for(@cms_section.image_one) %>
38
38
  </figure>
39
39
  <% end %>
40
- <%= f.field_container :image_one, class: ['form-group mb-0'] do %>
41
- <%= f.file_field :image_one %>
42
- <%= f.error_message_on :image_one %>
43
- <% end %>
40
+
41
+ <%= f.file_field :image_one %>
42
+ <%= f.error_message_on :image_one %>
44
43
  <% end %>
45
44
  <small class="form-text text-muted"><%= Spree.t('admin.cms.hero.aspect_ratio') %></small>
46
45
  </div>
@@ -22,7 +22,7 @@
22
22
 
23
23
  <div class="row">
24
24
  <div class="col-12 col-md-4 mb-3">
25
- <div class="card p-3">
25
+ <div id="image_a_details" class="card p-3">
26
26
  <div class="text-center">
27
27
  <h4 class="pb-2"><%= Spree.t('admin.cms.image_gallery.image_a') %></h4>
28
28
  <%= f.field_container :image_one, class: ['form-group'] do %>
@@ -35,10 +35,9 @@
35
35
  <%= image_tag main_app.url_for(@cms_section.image_one) %>
36
36
  </figure>
37
37
  <% end %>
38
- <%= f.field_container :image_one, class: ['form-group mb-0'] do %>
39
- <%= f.file_field :image_one %>
40
- <%= f.error_message_on :image_one %>
41
- <% end %>
38
+
39
+ <%= f.file_field :image_one %>
40
+ <%= f.error_message_on :image_one %>
42
41
  <% end %>
43
42
  </div>
44
43
  <small class="text-muted mb-4"><%= Spree.t('admin.cms.image_gallery.square_image') %></small>
@@ -67,7 +66,7 @@
67
66
  </div>
68
67
 
69
68
  <div class="col-12 col-md-4 mb-3">
70
- <div class="card p-3">
69
+ <div id="image_b_details" class="card p-3">
71
70
  <div class="text-center">
72
71
  <h4 class="pb-2"><%= Spree.t('admin.cms.image_gallery.image_b') %></h4>
73
72
  <%= f.field_container :image_two, class: ['form-group'] do %>
@@ -80,10 +79,9 @@
80
79
  <%= image_tag main_app.url_for(@cms_section.image_two) %>
81
80
  </figure>
82
81
  <% end %>
83
- <%= f.field_container :image_two, class: ['form-group mb-0'] do %>
84
- <%= f.file_field :image_two %>
85
- <%= f.error_message_on :image_two %>
86
- <% end %>
82
+
83
+ <%= f.file_field :image_two %>
84
+ <%= f.error_message_on :image_two %>
87
85
  <% end %>
88
86
  </div>
89
87
  <small class="text-muted mb-4"><%= Spree.t('admin.cms.image_gallery.tall_image') %></small>
@@ -112,7 +110,7 @@
112
110
  </div>
113
111
 
114
112
  <div class="col-12 col-md-4 mb-3">
115
- <div class="card p-3">
113
+ <div id="image_c_details" class="card p-3">
116
114
  <div class="text-center">
117
115
  <h4 class="pb-2"><%= Spree.t('admin.cms.image_gallery.image_c') %></h4>
118
116
  <%= f.field_container :image_three, class: ['form-group'] do %>
@@ -125,10 +123,9 @@
125
123
  <%= image_tag main_app.url_for(@cms_section.image_three) %>
126
124
  </figure>
127
125
  <% end %>
128
- <%= f.field_container :image_three, class: ['form-group mb-0'] do %>
129
- <%= f.file_field :image_three %>
130
- <%= f.error_message_on :image_three %>
131
- <% end %>
126
+
127
+ <%= f.file_field :image_three %>
128
+ <%= f.error_message_on :image_three %>
132
129
  <% end %>
133
130
  </div>
134
131
  <small class="text-muted mb-4"><%= Spree.t('admin.cms.image_gallery.square_image') %></small>
@@ -1,6 +1,6 @@
1
1
  <div class="row pb-0">
2
2
  <div class="col-12 col-md-6 mb-3">
3
- <div class="card p-3">
3
+ <div id="left_image_details" class="card p-3">
4
4
  <div class="text-center">
5
5
  <h4 class="pb-2"><%= Spree.t('admin.cms.side_by_side.left_image') %></h4>
6
6
  <%= f.field_container :image_one, class: ['form-group'] do %>
@@ -51,7 +51,7 @@
51
51
  </div>
52
52
 
53
53
  <div class="col-12 col-md-6 mb-3">
54
- <div class="card p-3">
54
+ <div id="right_image_details" class="card p-3">
55
55
  <div class="text-center">
56
56
  <h4 class="pb-2"><%= Spree.t('admin.cms.side_by_side.right_image') %></h4>
57
57
  <%= f.field_container :image_two, class: ['form-group'] do %>
@@ -42,7 +42,7 @@
42
42
  </td>
43
43
  <td class="image">
44
44
  <div class="admin-product-image-container small-img">
45
- <%= link_to image_tag(main_app.url_for(image.url(:mini))), main_app.rails_blob_url(image.attachment) %>
45
+ <%= link_to image_tag(main_app.url_for(image.url(:product))), main_app.rails_blob_url(image.attachment) %>
46
46
  </div>
47
47
  </td>
48
48
  <% if has_variants %>
@@ -1,14 +1,27 @@
1
1
  <%= f.field_container save_to, class: ['form-group'] do %>
2
2
  <%= f.label save_to, Spree.t('admin.cms.link_to_product') %>
3
- <%= f.select save_to,
4
- options_from_collection_for_select([resource],
5
- save_to, save_to, resource.send(save_to) || nil),
6
- { include_blank: true },
7
- class: 'select2autocomplete',
8
- data: { autocomplete_placeholder_value: Spree.t('admin.navigation.seach_for_a_product'),
9
- autocomplete_clear_value: true,
10
- autocomplete_url_value: 'products_api_v2',
11
- autocomplete_return_attr_value: 'name',
12
- autocomplete_custom_return_id_value: 'slug' } %>
3
+ <%= f.select save_to, options_from_collection_for_select([resource], save_to, save_to, resource.send(save_to) || nil), { include_blank: true },
4
+ id: "cms_section_#{save_to}",
5
+ data: { autocomplete_placeholder_value: Spree.t('admin.navigation.seach_for_a_product'),
6
+ autocomplete_clear_value: true,
7
+ autocomplete_url_value: 'products_api_v2',
8
+ autocomplete_return_attr_value: 'name',
9
+ autocomplete_custom_return_id_value: 'slug' } %>
10
+
13
11
  <%= f.error_message_on :save_to %>
14
12
  <% end %>
13
+
14
+ <% if resource.link_one.present? %>
15
+ <script>
16
+ populateSelectOptionsFromApi({
17
+ targetElement: "#cms_section_<%= save_to %>",
18
+ apiUrl: Spree.routes.products_api_v2 + "?filter[slug_matches]=<%= resource.send(save_to) %>",
19
+ returnValueFromAttributes: 'slug',
20
+ returnOptionText: 'name',
21
+
22
+ <% if resource.send(save_to) %>
23
+ selectedOption: "<%= resource.send(save_to) %>"
24
+ <% end %>
25
+ })
26
+ </script>
27
+ <% end %>
@@ -1,14 +1,27 @@
1
1
  <%= f.field_container save_to, class: ['form-group'] do %>
2
2
  <%= f.label save_to, Spree.t('admin.cms.link_to_taxon') %>
3
- <%= f.select save_to,
4
- options_from_collection_for_select([resource],
5
- save_to, save_to, resource.send(save_to) || nil),
6
- { include_blank: true },
7
- class: 'select2autocomplete',
8
- data: { autocomplete_placeholder_value: Spree.t('admin.navigation.seach_for_a_taxon'),
9
- autocomplete_clear_value: true,
10
- autocomplete_url_value: 'taxons_api_v2',
11
- autocomplete_return_attr_value: 'permalink',
12
- autocomplete_custom_return_id_value: 'permalink' } %>
3
+ <%= f.select save_to, options_from_collection_for_select([resource], save_to, save_to, resource.send(save_to) || nil), { include_blank: true },
4
+ id: "cms_section_#{save_to}",
5
+ data: { autocomplete_placeholder_value: Spree.t('admin.navigation.seach_for_a_taxon'),
6
+ autocomplete_clear_value: true,
7
+ autocomplete_url_value: 'taxons_api_v2',
8
+ autocomplete_return_attr_value: 'pretty_name',
9
+ autocomplete_custom_return_id_value: 'permalink' } %>
10
+
13
11
  <%= f.error_message_on :save_to %>
14
12
  <% end %>
13
+
14
+ <% if resource.link_one.present? %>
15
+ <script>
16
+ populateSelectOptionsFromApi({
17
+ targetElement: "#cms_section_<%= save_to %>",
18
+ apiUrl: Spree.routes.taxons_api_v2 + "?filter[permalink_matches]=<%= resource.send(save_to) %>",
19
+ returnValueFromAttributes: 'permalink',
20
+ returnOptionText: 'pretty_name',
21
+
22
+ <% if resource.send(save_to) %>
23
+ selectedOption: "<%= resource.send(save_to) %>"
24
+ <% end %>
25
+ })
26
+ </script>
27
+ <% end %>
@@ -16,12 +16,7 @@
16
16
  autocomplete_url_value: 'pages_api_v2',
17
17
  autocomplete_return_attr_value: 'title',
18
18
  autocomplete_search_query_value: 'title_i_cont',
19
-
20
- # Hard coded additional filter to filter out homepages from
21
- # the results. Homepages don't have a slug, and we already have
22
- # a dedicated Home Page link_to type.
23
- autocomplete_additional_query_value: 'type_not_eq',
24
- autocomplete_additional_term_value: 'Spree::Cms::Pages::Homepage' } %>
19
+ autocomplete_additional_url_params_value: 'filter[type_not_eq]=Spree::Cms::Pages::Homepage' } %>
25
20
 
26
21
  <%= f.error_message_on :linked_resource_id %>
27
22
  <small class="form-text text-muted"><%= resource.link %></small>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_backend
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.0.rc3
4
+ version: 4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sean Schofield
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-08-30 00:00:00.000000000 Z
12
+ date: 2021-09-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: spree_api
@@ -17,28 +17,28 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: 4.3.0.rc3
20
+ version: 4.3.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: 4.3.0.rc3
27
+ version: 4.3.0
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: spree_core
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: 4.3.0.rc3
34
+ version: 4.3.0
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: 4.3.0.rc3
41
+ version: 4.3.0
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: babel-transpiler
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -818,9 +818,9 @@ licenses:
818
818
  - BSD-3-Clause
819
819
  metadata:
820
820
  bug_tracker_uri: https://github.com/spree/spree/issues
821
- changelog_uri: https://github.com/spree/spree/releases/tag/v4.3.0.rc3
821
+ changelog_uri: https://github.com/spree/spree/releases/tag/v4.3.0
822
822
  documentation_uri: https://dev-docs.spreecommerce.org/
823
- source_code_uri: https://github.com/spree/spree/tree/v4.3.0.rc3
823
+ source_code_uri: https://github.com/spree/spree/tree/v4.3.0
824
824
  post_install_message:
825
825
  rdoc_options: []
826
826
  require_paths:
@@ -832,12 +832,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
832
832
  version: '2.5'
833
833
  required_rubygems_version: !ruby/object:Gem::Requirement
834
834
  requirements:
835
- - - ">"
835
+ - - ">="
836
836
  - !ruby/object:Gem::Version
837
- version: 1.3.1
837
+ version: '0'
838
838
  requirements:
839
839
  - none
840
- rubygems_version: 3.2.3
840
+ rubygems_version: 3.1.4
841
841
  signing_key:
842
842
  specification_version: 4
843
843
  summary: Admin Dashboard for Spree eCommerce platform