Commit 77d632890bce9835929daeec829b529799915815

Authored by Valeriy Sizov
1 parent aa8d4d9f

refactoring gfm_autocomplete

app/assets/javascripts/gfm_auto_complete.js.coffee
... ... @@ -13,7 +13,6 @@ GitLab.GfmAutoComplete =
13 13 url: ''
14 14 params:
15 15 private_token: ''
16   - page: 1
17 16 template: '<li data-value="${username}">${username} <small>${name}</small></li>'
18 17  
19 18 # Add GFM auto-completion to all input fields, that accept GFM input.
... ... @@ -29,30 +28,11 @@ GitLab.GfmAutoComplete =
29 28 input.atWho '@',
30 29 tpl: @Members.template
31 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 126 Parameters:
127 127  
128 128 + `id` (required) - The ID or code name of a project
  129 ++ `query` - Query string
129 130  
130 131 ## Get project team member
131 132  
... ...
lib/api/projects.rb
... ... @@ -57,10 +57,15 @@ module Gitlab
57 57 #
58 58 # Parameters:
59 59 # id (required) - The ID or code name of a project
  60 + # query - Query string
60 61 # Example Request:
61 62 # GET /projects/:id/members
62 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 69 present @members, with: Entities::ProjectMember, project: user_project
65 70 end
66 71  
... ...
spec/requests/api/projects_spec.rb
... ... @@ -117,6 +117,14 @@ describe Gitlab::API do
117 117 json_response.count.should == 2
118 118 json_response.first['email'].should == user.email
119 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 128 end
121 129  
122 130 describe "GET /projects/:id/members/:user_id" do
... ...