Commit a567d596f85b2f2f23e8e6f31f0eb3fa957f2c48

Authored by Dmitriy Zaporozhets
2 parents 0efc903e 77d63289

Merge pull request #2305 from gitlabhq/fix_gfm_auto_complete

Fix and refactoring gfm_autocomplete
app/assets/javascripts/gfm_auto_complete.js.coffee
@@ -13,7 +13,6 @@ GitLab.GfmAutoComplete = @@ -13,7 +13,6 @@ GitLab.GfmAutoComplete =
13 url: '' 13 url: ''
14 params: 14 params:
15 private_token: '' 15 private_token: ''
16 - page: 1  
17 template: '<li data-value="${username}">${username} <small>${name}</small></li>' 16 template: '<li data-value="${username}">${username} <small>${name}</small></li>'
18 17
19 # Add GFM auto-completion to all input fields, that accept GFM input. 18 # Add GFM auto-completion to all input fields, that accept GFM input.
@@ -29,30 +28,11 @@ GitLab.GfmAutoComplete = @@ -29,30 +28,11 @@ GitLab.GfmAutoComplete =
29 input.atWho '@', 28 input.atWho '@',
30 tpl: @Members.template 29 tpl: @Members.template
31 callback: (query, callback) => 30 callback: (query, callback) =>
32 - (getMoreMembers = =>  
33 - $.getJSON(@Members.url, @Members.params).done (members) =>  
34 - # pick the data we need  
35 - newMembersData = $.map(members, (m) ->  
36 - username: m.username  
37 - name: m.name  
38 - ) 31 + request_params = $.extend({}, @Members.params, query: query)
  32 + $.getJSON(@Members.url, request_params).done (members) =>
  33 + new_members_data = $.map(members, (m) ->
  34 + username: m.username,
  35 + name: m.name
  36 + )
  37 + callback(new_members_data)
39 38
40 - # add the new page of data to the rest  
41 - $.merge(@Members.data, newMembersData)  
42 -  
43 - # show the pop-up with a copy of the current data  
44 - callback(@Members.data[..])  
45 -  
46 - # are we past the last page?  
47 - if newMembersData.length is 0  
48 - # set static data and stop callbacks  
49 - input.atWho '@',  
50 - data: @Members.data  
51 - callback: null  
52 - else  
53 - # get next page  
54 - getMoreMembers()  
55 -  
56 - # so the next callback requests the next page  
57 - @Members.params.page += 1  
58 - ).call()  
doc/api/projects.md
@@ -126,6 +126,7 @@ GET /projects/:id/members @@ -126,6 +126,7 @@ GET /projects/:id/members
126 Parameters: 126 Parameters:
127 127
128 + `id` (required) - The ID or code name of a project 128 + `id` (required) - The ID or code name of a project
  129 ++ `query` - Query string
129 130
130 ## Get project team member 131 ## Get project team member
131 132
lib/api/projects.rb
@@ -57,10 +57,15 @@ module Gitlab @@ -57,10 +57,15 @@ module Gitlab
57 # 57 #
58 # Parameters: 58 # Parameters:
59 # id (required) - The ID or code name of a project 59 # id (required) - The ID or code name of a project
  60 + # query - Query string
60 # Example Request: 61 # Example Request:
61 # GET /projects/:id/members 62 # GET /projects/:id/members
62 get ":id/members" do 63 get ":id/members" do
63 - @members = paginate user_project.users 64 + if params[:query].present?
  65 + @members = paginate user_project.users.where("username LIKE ?", "%#{params[:query]}%")
  66 + else
  67 + @members = paginate user_project.users
  68 + end
64 present @members, with: Entities::ProjectMember, project: user_project 69 present @members, with: Entities::ProjectMember, project: user_project
65 end 70 end
66 71
spec/requests/api/projects_spec.rb
@@ -117,6 +117,14 @@ describe Gitlab::API do @@ -117,6 +117,14 @@ describe Gitlab::API do
117 json_response.count.should == 2 117 json_response.count.should == 2
118 json_response.first['email'].should == user.email 118 json_response.first['email'].should == user.email
119 end 119 end
  120 +
  121 + it "finds team members with query string" do
  122 + get api("/projects/#{project.path}/members", user), query: user.username
  123 + response.status.should == 200
  124 + json_response.should be_an Array
  125 + json_response.count.should == 1
  126 + json_response.first['email'].should == user.email
  127 + end
120 end 128 end
121 129
122 describe "GET /projects/:id/members/:user_id" do 130 describe "GET /projects/:id/members/:user_id" do