From 7753d9e1ea53d16bf44e5ea6fb68b8bc719d4c85 Mon Sep 17 00:00:00 2001 From: Matt-Yorkley <9029026+Matt-Yorkley@users.noreply.github.com> Date: Sun, 30 Jan 2022 14:14:47 +0000 Subject: [PATCH] Use TomSelect and dependent-select controller in admin order customer details form and remove ancient jQuery which uses global functions and inline scripts :tada: --- .../admin/spree/orders/address_states.js | 17 --------------- .../customer_details/_address_form.html.haml | 21 ++++++++++++------- .../orders/customer_details/_form.html.haml | 1 - 3 files changed, 13 insertions(+), 26 deletions(-) delete mode 100644 app/assets/javascripts/admin/spree/orders/address_states.js diff --git a/app/assets/javascripts/admin/spree/orders/address_states.js b/app/assets/javascripts/admin/spree/orders/address_states.js deleted file mode 100644 index ef1cf6b367..0000000000 --- a/app/assets/javascripts/admin/spree/orders/address_states.js +++ /dev/null @@ -1,17 +0,0 @@ -var update_state = function(region) { - var country = $('span#' + region + 'country .select2').select2('val'); - var state_select = $('span#' + region + 'state select.select2'); - - $.get(Spree.routes.states_search + "?country_id=" + country, function(states) { - state_select.html(''); - var states_with_blank = [{name: '', id: ''}].concat(states); - $.each(states_with_blank, function(pos,state) { - var opt = $(document.createElement('option')) - .attr('value', state.id) - .html(state.name); - state_select.append(opt); - }); - state_select.prop("disabled", false).show(); - state_select.select2(); - }) -}; diff --git a/app/views/spree/admin/orders/customer_details/_address_form.html.haml b/app/views/spree/admin/orders/customer_details/_address_form.html.haml index da8d943c18..c64a70aac7 100644 --- a/app/views/spree/admin/orders/customer_details/_address_form.html.haml +++ b/app/views/spree/admin/orders/customer_details/_address_form.html.haml @@ -6,6 +6,7 @@ - is_shipping_address = name == Spree.t(:shipping_address) - s_or_b = is_shipping_address ? 's' : 'b' +- address_type = is_shipping_address ? 'shipping' : 'billing' - display_style = (use_billing && (!(@order.bill_address.empty? && @order.ship_address.empty?) && @order.bill_address == @order.ship_address)) ? 'none' : 'block' @@ -28,14 +29,18 @@ %div{class: "field"} = f.label :zipcode, Spree.t(:zip) + ':' = f.text_field :zipcode, class: 'fullwidth' - %div{class: "field"} - = f.label :country_id, Spree.t(:country) + ':' - %span{id: "#{s_or_b}country"} - = f.collection_select :country_id, available_countries, :id, :name, {}, {class: 'select2 fullwidth', onchange: "update_state('#{s_or_b}')"} - %div{class: "field"} - = f.label :state_id, Spree.t(:state) + ':' - %span{id: "#{s_or_b}state"} - = f.collection_select :state_id, f.object.country.states.sort, :id, :name, {include_blank: true}, {class: 'select2 fullwidth', disabled: f.object.country.states.empty?} + %div{"data-controller": "dependant-select", "data-dependant-select-options-value": countries_with_states } + %div{class: "field"} + = f.label :country_id, Spree.t(:country) + ':' + %span{id: "#{s_or_b}country"} + = f.select :country_id, countries, { selected: @order.send("#{address_type}_address").country_id }, + { "data-controller": "tom-select", "data-dependant-select-target": "source", "data-action": "dependant-select#handleSelectChange", class: "primary" } + %div{class: "field"} + = f.label :state_id, Spree.t(:state) + ':' + %span{id: "#{s_or_b}state"} + = f.select :state_id, states_for_country(@order.send("#{address_type}_address").country), { selected: @order.send("#{address_type}_address").state_id }, + { "data-controller": "tom-select", "data-dependant-select-target": "select", class: "primary" } + %div{class: "field"} = f.label :phone, Spree.t(:phone) + ':' = f.phone_field :phone, class: 'fullwidth' diff --git a/app/views/spree/admin/orders/customer_details/_form.html.haml b/app/views/spree/admin/orders/customer_details/_form.html.haml index 772dc48df1..df34bd81d7 100644 --- a/app/views/spree/admin/orders/customer_details/_form.html.haml +++ b/app/views/spree/admin/orders/customer_details/_form.html.haml @@ -25,5 +25,4 @@ = button Spree.t('actions.update'), 'icon-refresh' - content_for :head do - = javascript_include_tag 'admin/spree/orders/address_states.js' = javascript_include_tag 'admin/spree/orders/use_billing.js'