diff --git a/app/assets/javascripts/admin_email_select.js.coffee b/app/assets/javascripts/admin_email_select.js.coffee
new file mode 100644
index 0000000000..83b28ed086
--- /dev/null
+++ b/app/assets/javascripts/admin_email_select.js.coffee
@@ -0,0 +1,46 @@
+class @AdminEmailSelect
+ constructor: ->
+ $('.ajax-admin-email-select').each (i, select) =>
+ skip_ldap = $(select).hasClass('skip_ldap')
+
+ $(select).select2
+ placeholder: "Select group or project"
+ multiple: $(select).hasClass('multiselect')
+ minimumInputLength: 0
+ query: (query) ->
+ group_result = Api.groups query.term, skip_ldap, (groups) ->
+ groups
+
+ project_result = Api.projects query.term, (projects) ->
+ projects
+
+ $.when(project_result, group_result).done (projects, groups) ->
+ data = $.merge(groups[0], projects[0])
+ query.callback({ results: data})
+
+ formatResult: (args...) =>
+ @formatResult(args...)
+ formatSelection: (args...) =>
+ @formatSelection(args...)
+ dropdownCssClass: "ajax-admin-email-dropdown"
+ escapeMarkup: (m) -> # we do not want to escape markup since we are displaying html in results
+ m
+
+ formatResult: (object) ->
+ if object.path_with_namespace
+ "
+
#{object.name}
+
#{object.path_with_namespace}
+
"
+ else
+ "
+
#{object.name}
+
#{object.path}
+
"
+
+ formatSelection: (object) ->
+ if object.path_with_namespace
+ "Project: #{object.name}"
+ else
+ "Group: #{object.name}"
+
diff --git a/app/assets/javascripts/dispatcher.js.coffee b/app/assets/javascripts/dispatcher.js.coffee
index 39710a7982..ef0d1236b5 100644
--- a/app/assets/javascripts/dispatcher.js.coffee
+++ b/app/assets/javascripts/dispatcher.js.coffee
@@ -81,6 +81,8 @@ class Dispatcher
new User()
when 'projects:group_links:index'
new GroupsSelect()
+ when 'admin:emails:show'
+ new AdminEmailSelect()
switch path.first()
when 'admin'
diff --git a/app/helpers/admin_email_helper.rb b/app/helpers/admin_email_helper.rb
index 28dfe3f601..f4f42ab061 100644
--- a/app/helpers/admin_email_helper.rb
+++ b/app/helpers/admin_email_helper.rb
@@ -16,4 +16,4 @@ module AdminEmailHelper
end
end
end
-end
\ No newline at end of file
+end
diff --git a/app/helpers/selects_helper.rb b/app/helpers/selects_helper.rb
index 475450781f..81871761f4 100644
--- a/app/helpers/selects_helper.rb
+++ b/app/helpers/selects_helper.rb
@@ -35,4 +35,13 @@ module SelectsHelper
hidden_field_tag(id, value, class: css_class)
end
+
+ def admin_email_select_tag(id, opts = {})
+ css_class = "ajax-admin-email-select "
+ css_class << "multiselect " if opts[:multiple]
+ css_class << (opts[:class] || '')
+ value = opts[:selected] || ''
+
+ hidden_field_tag(id, value, class: css_class)
+ end
end
diff --git a/app/views/admin/emails/show.html.haml b/app/views/admin/emails/show.html.haml
index 58bd208409..90e4e3aa2f 100644
--- a/app/views/admin/emails/show.html.haml
+++ b/app/views/admin/emails/show.html.haml
@@ -17,6 +17,6 @@
.form-group
%label.control-label{for: :recipients} Recipient group
.col-sm-10
- = select_tag :recipients, admin_email_grouped_recipient_options, class: :select2, required: true
+ = admin_email_select_tag(:recipients)
.form-actions
= submit_tag 'Send message', class: 'btn btn-create'
diff --git a/app/workers/admin_emails_worker.rb b/app/workers/admin_emails_worker.rb
index 56d83d7ebe..0f13d092d2 100644
--- a/app/workers/admin_emails_worker.rb
+++ b/app/workers/admin_emails_worker.rb
@@ -18,4 +18,4 @@ class AdminEmailsWorker
Project.find($1).team.users.subscribed_for_admin_email
end
end
-end
\ No newline at end of file
+end