From 27ee0fc57b3b3fe28f55d2a8cae424e99cf8f79e Mon Sep 17 00:00:00 2001
From: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Date: Tue, 30 Dec 2014 11:32:24 +0200
Subject: [PATCH] Helper for ajax group selectbox

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
---
 app/assets/javascripts/api.js.coffee        | 29 +++++++++++++++++++++
 app/assets/stylesheets/generic/selects.scss | 12 +++++++++
 app/helpers/selects_helper.rb               |  9 +++++++
 3 files changed, 50 insertions(+)

diff --git a/app/assets/javascripts/api.js.coffee b/app/assets/javascripts/api.js.coffee
index fafa5cdfaa4..27d04e7cac6 100644
--- a/app/assets/javascripts/api.js.coffee
+++ b/app/assets/javascripts/api.js.coffee
@@ -1,4 +1,6 @@
 @Api =
+  groups_path: "/api/:version/groups.json"
+  group_path: "/api/:version/groups/:id.json"
   users_path: "/api/:version/users.json"
   user_path: "/api/:version/users/:id.json"
   notes_path: "/api/:version/projects/:id/notes.json"
@@ -51,6 +53,33 @@
     ).done (users) ->
       callback(users)
 
+  group: (group_id, callback) ->
+    url = Api.buildUrl(Api.group_path)
+    url = url.replace(':id', group_id)
+
+    $.ajax(
+      url: url
+      data:
+        private_token: gon.api_token
+      dataType: "json"
+    ).done (group) ->
+      callback(group)
+
+  # Return groups list. Filtered by query
+  # Only active groups retrieved
+  groups: (query, skip_ldap, callback) ->
+    url = Api.buildUrl(Api.groups_path)
+
+    $.ajax(
+      url: url
+      data:
+        private_token: gon.api_token
+        search: query
+        per_page: 20
+      dataType: "json"
+    ).done (groups) ->
+      callback(groups)
+
   # Return project users list. Filtered by query
   # Only active users retrieved
   projectUsers: (project_id, query, callback) ->
diff --git a/app/assets/stylesheets/generic/selects.scss b/app/assets/stylesheets/generic/selects.scss
index e0f508d2695..d85e80a512b 100644
--- a/app/assets/stylesheets/generic/selects.scss
+++ b/app/assets/stylesheets/generic/selects.scss
@@ -116,6 +116,18 @@ select {
   }
 }
 
+.group-result {
+  .group-image {
+    float: left;
+  }
+  .group-name {
+    font-weight: bold;
+  }
+  .group-path {
+    color: #999;
+  }
+}
+
 .user-result {
   .user-image {
     float: left;
diff --git a/app/helpers/selects_helper.rb b/app/helpers/selects_helper.rb
index ab24367c455..796d805f219 100644
--- a/app/helpers/selects_helper.rb
+++ b/app/helpers/selects_helper.rb
@@ -17,4 +17,13 @@ module SelectsHelper
     project_id = opts[:project_id] || @project.id
     hidden_field_tag(id, value, class: css_class, 'data-placeholder' => placeholder, 'data-project-id' => project_id)
   end
+
+  def groups_select_tag(id, opts = {})
+    css_class = "ajax-groups-select "
+    css_class << "multiselect " if opts[:multiple]
+    css_class << (opts[:class] || '')
+    value = opts[:selected] || ''
+
+    hidden_field_tag(id, value, class: css_class)
+  end
 end
-- 
GitLab