diff --git a/app/assets/javascripts/app.js.coffee b/app/assets/javascripts/app.js.coffee index b2fa7366c..978ce5485 100644 --- a/app/assets/javascripts/app.js.coffee +++ b/app/assets/javascripts/app.js.coffee @@ -1,13 +1,6 @@ ready = -> - Autocomplete.bindTypeahead - remote: '/admin/registrars/search' - selector: '.js-registrar-typeahead' - hiddenSelector: '.js-registrar-id' - - Autocomplete.bindTypeahead - remote: '/admin/contacts/search' - selector: '.js-contact-typeahead' - hiddenSelector: '.js-contact-id' + Autocomplete.bindContactSearch() + Autocomplete.bindRegistrarSearch() $(document).ready(ready) $(document).on('page:load', ready) diff --git a/app/assets/javascripts/autocomplete.js.coffee b/app/assets/javascripts/autocomplete.js.coffee index 545ed1876..cc9565bcc 100644 --- a/app/assets/javascripts/autocomplete.js.coffee +++ b/app/assets/javascripts/autocomplete.js.coffee @@ -1,6 +1,7 @@ class @Autocomplete @bindTypeahead: (obj) -> - Autocomplete.toggleOkFeedback(obj.hiddenSelector) + Autocomplete.toggleOkFeedbacksOnLoad(obj) + # Autocomplete.toggleOkFeedback(obj.hiddenSelector) $(obj.selector).typeahead( highlight: true, hint: false @@ -8,8 +9,9 @@ class @Autocomplete displayKey: "display_key" source: Autocomplete.constructSourceAdapter(obj.remote) ).on('typeahead:selected', (e, item) -> - $(obj.hiddenSelector).val item.id - Autocomplete.toggleOkFeedback(obj.hiddenSelector) + parent = $(e.currentTarget).parents('div.has-feedback') + jObj = parent.find(obj.hiddenSelector).val item.id + Autocomplete.toggleOkFeedback(jObj) ) @constructSourceAdapter: (remote) -> @@ -24,10 +26,29 @@ class @Autocomplete source.initialize() source.ttAdapter() - @toggleOkFeedback: (hiddenSelector) -> - if $(hiddenSelector).val() - ok = $(hiddenSelector).parent('div.has-feedback').find('.js-typeahead-ok') - remove = $(hiddenSelector).parents('div.has-feedback').find('.js-typeahead-remove') + @toggleOkFeedback: (jObj) -> + ok = jObj.parents('div.has-feedback').find('.js-typeahead-ok') + remove = jObj.parents('div.has-feedback').find('.js-typeahead-remove') + if jObj.val() ok.removeClass('hidden') remove.addClass('hidden') + else + remove.removeClass('hidden') + ok.addClass('hidden') + + @toggleOkFeedbacksOnLoad: (obj) -> + $.each $(obj.hiddenSelector), (k, v) -> + Autocomplete.toggleOkFeedback($(v)) + + @bindContactSearch: -> + Autocomplete.bindTypeahead + remote: '/admin/contacts/search' + selector: '.js-contact-typeahead' + hiddenSelector: '.js-contact-id' + + @bindRegistrarSearch: -> + Autocomplete.bindTypeahead + remote: '/admin/registrars/search' + selector: '.js-registrar-typeahead' + hiddenSelector: '.js-registrar-id' diff --git a/app/models/domain_contact.rb b/app/models/domain_contact.rb index 877613e6d..d60d855b0 100644 --- a/app/models/domain_contact.rb +++ b/app/models/domain_contact.rb @@ -6,7 +6,7 @@ class DomainContact < ActiveRecord::Base def epp_code_map { '2302' => [ - [:contact, :taken, {value: {obj: 'contact', val: contact.code}}] + [:contact, :taken, { value: { obj: 'contact', val: contact.code } }] ] } end @@ -15,7 +15,7 @@ class DomainContact < ActiveRecord::Base ADMIN = 'admin' TYPES = [TECH, ADMIN] - # TODO: Fix EPP problems + validates :contact, presence: true validates :contact, uniqueness: { scope: [:domain_id, :contact_type] } scope :admin, -> { where(contact_type: ADMIN) } diff --git a/app/views/admin/domains/form_partials/_nameservers.haml b/app/views/admin/domains/form_partials/_nameservers.haml index 1a75fe2b4..8ee314c9b 100644 --- a/app/views/admin/domains/form_partials/_nameservers.haml +++ b/app/views/admin/domains/form_partials/_nameservers.haml @@ -28,3 +28,5 @@ item.find('.errors').html(''); } }); + + diff --git a/app/views/admin/domains/form_partials/_tech_contacts.haml b/app/views/admin/domains/form_partials/_tech_contacts.haml index 3136c6324..6382c8150 100644 --- a/app/views/admin/domains/form_partials/_tech_contacts.haml +++ b/app/views/admin/domains/form_partials/_tech_contacts.haml @@ -13,7 +13,7 @@ = contact_fields.label :contact_type = contact_fields.select :contact_type, options_for_select(DomainContact::TYPES, contact_fields.object.contact_type), {}, {class: 'form-control'} .col-md-6 - .form-group.has-feedback + .form-group.has-feedback.js-typeahead-container = label_tag :contact = text_field_tag(:contact, params[:contact], class: 'form-control js-contact-typeahead', placeholder: t('shared.contact_code'), autocomplete: 'off') %span.glyphicon.glyphicon-ok.form-control-feedback.js-typeahead-ok.hidden @@ -24,5 +24,7 @@ bindAddTo: $(".add-domain-contact"), afterAdd: function(item) { item.find('.errors').html(''); + item.find('.js-contact-id').val('') + Autocomplete.bindContactSearch(); } }); diff --git a/config/locales/en.yml b/config/locales/en.yml index 895b7af3e..8fe91edbb 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -120,6 +120,7 @@ en: domain_contact: attributes: contact: + blank: 'Contact was not found' taken: 'Contact already exists on this domain!' setting: