mirror of
https://github.com/internetee/registry.git
synced 2025-05-17 17:59:47 +02:00
Bind typehead to contact too
This commit is contained in:
parent
13349a6bc9
commit
1c165cd1e4
7 changed files with 55 additions and 30 deletions
|
@ -1,20 +1,9 @@
|
||||||
registrarSource = new Bloodhound(
|
Autocomplete.bindTypeahead
|
||||||
datumTokenizer: (d) ->
|
remote: '/admin/registrars/search'
|
||||||
Bloodhound.tokenizers.whitespace d.display_key
|
selector: '.js-registrar-typeahead'
|
||||||
|
hiddenSelector: '.js-registrar-id'
|
||||||
|
|
||||||
queryTokenizer: Bloodhound.tokenizers.whitespace
|
Autocomplete.bindTypeahead
|
||||||
remote: "/admin/registrars/search?q=%QUERY"
|
remote: '/admin/contacts/search'
|
||||||
)
|
selector: '.js-contact-typeahead'
|
||||||
|
hiddenSelector: '.js-contact-id'
|
||||||
registrarSource.initialize()
|
|
||||||
$(".js-registrars-typeahead").typeahead(
|
|
||||||
highlight: true,
|
|
||||||
hint: false
|
|
||||||
,
|
|
||||||
displayKey: "display_key"
|
|
||||||
source: registrarSource.ttAdapter()
|
|
||||||
).on('typeahead:selected', (e, obj) ->
|
|
||||||
$('input[name="domain[registrar_id]"]').val obj.id
|
|
||||||
$('.js-registrar-selected').removeClass('hidden')
|
|
||||||
$('.js-registrar-unselected').addClass('hidden')
|
|
||||||
)
|
|
||||||
|
|
|
@ -5,7 +5,8 @@
|
||||||
#= require nprogress
|
#= require nprogress
|
||||||
#= require nprogress-turbolinks
|
#= require nprogress-turbolinks
|
||||||
#= require typeahead.bundle.min
|
#= require typeahead.bundle.min
|
||||||
#= require_tree .
|
#= require autocomplete
|
||||||
|
#= require app
|
||||||
|
|
||||||
NProgress.configure
|
NProgress.configure
|
||||||
showSpinner: false
|
showSpinner: false
|
||||||
|
|
29
app/assets/javascripts/autocomplete.js.coffee
Normal file
29
app/assets/javascripts/autocomplete.js.coffee
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
class @Autocomplete
|
||||||
|
@bindTypeahead: (obj) ->
|
||||||
|
$(obj.selector).typeahead(
|
||||||
|
highlight: true,
|
||||||
|
hint: false
|
||||||
|
,
|
||||||
|
displayKey: "display_key"
|
||||||
|
source: Autocomplete.constructSourceAdapter(obj.remote)
|
||||||
|
).on('typeahead:selected', (e, item) ->
|
||||||
|
$(obj.hiddenSelector).val item.id
|
||||||
|
|
||||||
|
ok = $(obj.hiddenSelector).parent('div.has-feedback').find('.js-typeahead-ok')
|
||||||
|
remove = $(obj.hiddenSelector).parents('div.has-feedback').find('.js-typeahead-remove')
|
||||||
|
|
||||||
|
ok.removeClass('hidden')
|
||||||
|
remove.addClass('hidden')
|
||||||
|
)
|
||||||
|
|
||||||
|
@constructSourceAdapter: (remote) ->
|
||||||
|
source = new Bloodhound(
|
||||||
|
datumTokenizer: (d) ->
|
||||||
|
Bloodhound.tokenizers.whitespace d.display_key
|
||||||
|
|
||||||
|
queryTokenizer: Bloodhound.tokenizers.whitespace
|
||||||
|
remote: "#{remote}?q=%QUERY"
|
||||||
|
)
|
||||||
|
|
||||||
|
source.initialize()
|
||||||
|
source.ttAdapter()
|
|
@ -1,7 +1,5 @@
|
||||||
class Admin::ContactsController < ApplicationController
|
class Admin::ContactsController < ApplicationController
|
||||||
def search
|
def search
|
||||||
c = Contact.arel_table
|
render json: Contact.search_by_query(params[:q])
|
||||||
query_string = "%#{params[:query]}%"
|
|
||||||
render json: Contact.where(c[:code].matches(query_string)).pluck(:code)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -144,6 +144,11 @@ class Contact < ActiveRecord::Base
|
||||||
|
|
||||||
res
|
res
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def search_by_query(query)
|
||||||
|
res = search(code_cont: query).result
|
||||||
|
res.reduce([]) { |o, v| o << { id: v[:id], display_key: "#{v.name} (#{v.code})" } }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -10,7 +10,7 @@ class Registrar < ActiveRecord::Base
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
def search_by_query(query)
|
def search_by_query(query)
|
||||||
res = Registrar.search(name_or_reg_no_cont: query).result
|
res = search(name_or_reg_no_cont: query).result
|
||||||
res.reduce([]) { |o, v| o << { id: v[:id], display_key: "#{v[:name]} (#{v[:reg_no]})" } }
|
res.reduce([]) { |o, v| o << { id: v[:id], display_key: "#{v[:name]} (#{v[:reg_no]})" } }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,13 +12,16 @@
|
||||||
.col-md-6
|
.col-md-6
|
||||||
.form-group.has-feedback
|
.form-group.has-feedback
|
||||||
= f.label :registrar
|
= f.label :registrar
|
||||||
= f.text_field(:registrar, class: 'form-control js-typeahead js-registrars-typeahead', placeholder: t('shared.registrar_name'), autocomplete: 'off')
|
= f.text_field(:registrar, class: 'form-control js-registrar-typeahead', placeholder: t('shared.registrar_name'), autocomplete: 'off')
|
||||||
%span.glyphicon.glyphicon-remove.form-control-feedback.js-registrar-unselected
|
%span.glyphicon.glyphicon-ok.form-control-feedback.js-typeahead-ok.hidden
|
||||||
%span.glyphicon.glyphicon-ok.form-control-feedback.js-registrar-selected.hidden
|
%span.glyphicon.glyphicon-remove.form-control-feedback.js-typeahead-remove
|
||||||
= f.hidden_field(:registrar_id)
|
= f.hidden_field(:registrar_id, class: 'js-registrar-id')
|
||||||
.form-group
|
.form-group.has-feedback
|
||||||
= f.label :owner_contact
|
= f.label :owner_contact
|
||||||
= f.text_field(:owner_contact, class: 'form-control js-contacts-typeahead', placeholder: t('shared.contact_code'), autocomplete: 'off')
|
= f.text_field(:owner_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
|
||||||
|
%span.glyphicon.glyphicon-remove.form-control-feedback.js-typeahead-remove
|
||||||
|
= f.hidden_field(:owner_contact, class: 'js-contact-id')
|
||||||
.row
|
.row
|
||||||
.col-md-12.text-right
|
.col-md-12.text-right
|
||||||
= button_tag(t('shared.save'), class: 'btn btn-primary')
|
= button_tag(t('shared.save'), class: 'btn btn-primary')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue