Merge branch 'current-user-to-top-filter' into 'master'
Move current user to the top of the list in author/assignee filter ### What does this MR do? This MR puts the current user at the top of the user list in the author/assignee filters. ### Are there points in the code the reviewer needs to double check? Is it best to do this in the JavaScript as it is in this MR, or are we better off adding an argument to the `/users` API to put the current user on top? Also, I elected to put the current user after "Any" and "Unassigned"--it looked better. Do you agree? ### Why was this MR needed? If you're trying to look for "Me" in the list, often you have to scroll down a long way to find yourself. Using the filter to find yourself is yet another step requiring the keyboard, and it's easy to forget that feature is available. ### What are the relevant issue numbers / [Feature requests](http://feedback.gitlab.com/)? #1321 and #1396 ### Screenshots Before: ![Screen_Shot_2015-04-08_at_11.18.44_PM](https://gitlab.com/stanhu/gitlab-ce/uploads/4c28ae5a3a51a8329c806ecfbc549071/Screen_Shot_2015-04-08_at_11.18.44_PM.png) After: ![Screen_Shot_2015-04-08_at_11.20.06_PM](https://gitlab.com/stanhu/gitlab-ce/uploads/ff3b8bdf38467236edbcc29401cd1235/Screen_Shot_2015-04-08_at_11.20.06_PM.png) See merge request !505
This commit is contained in:
commit
149195eded
8 changed files with 39 additions and 3 deletions
|
@ -4,6 +4,7 @@ v 7.10.0 (unreleased)
|
|||
- Fix bug where Wiki pages that included a '/' were no longer accessible (Stan Hu)
|
||||
- Fix bug where error messages from Dropzone would not be displayed on the issues page (Stan Hu)
|
||||
- Add ability to configure Reply-To address in gitlab.yml (Stan Hu)
|
||||
- Move current user to the top of the list in assignee/author filters (Stan Hu)
|
||||
- Fix broken side-by-side diff view on merge request page (Stan Hu)
|
||||
- Set Application controller default URL options to ensure all url_for calls are consistent (Stan Hu)
|
||||
- Allow HTML tags in Markdown input
|
||||
|
|
|
@ -8,6 +8,7 @@ class @UsersSelect
|
|||
@groupId = $(select).data('group-id')
|
||||
showNullUser = $(select).data('null-user')
|
||||
showAnyUser = $(select).data('any-user')
|
||||
firstUser = $(select).data('first-user')
|
||||
|
||||
$(select).select2
|
||||
placeholder: "Search for a user"
|
||||
|
@ -32,6 +33,13 @@ class @UsersSelect
|
|||
id: 0
|
||||
}
|
||||
|
||||
if firstUser
|
||||
# Move current user to the front of the list
|
||||
for obj, index in data.results
|
||||
if obj.username == firstUser
|
||||
data.results.splice(index, 1)
|
||||
data.results.unshift(obj)
|
||||
break
|
||||
if showNullUser
|
||||
data.results.unshift(nullUser)
|
||||
if showAnyUser
|
||||
|
|
|
@ -8,12 +8,14 @@ module SelectsHelper
|
|||
|
||||
null_user = opts[:null_user] || false
|
||||
any_user = opts[:any_user] || false
|
||||
first_user = opts[:first_user] && current_user ? current_user.username : false
|
||||
|
||||
html = {
|
||||
class: css_class,
|
||||
'data-placeholder' => placeholder,
|
||||
'data-null-user' => null_user,
|
||||
'data-any-user' => any_user,
|
||||
'data-first-user' => first_user
|
||||
}
|
||||
|
||||
unless opts[:scope] == :all
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
- else
|
||||
none
|
||||
- if can?(current_user, :modify_issue, @issue)
|
||||
= users_select_tag('issue[assignee_id]', placeholder: 'Select assignee', class: 'custom-form-control js-select2 js-assignee', selected: @issue.assignee_id, null_user: true)
|
||||
= users_select_tag('issue[assignee_id]', placeholder: 'Select assignee', class: 'custom-form-control js-select2 js-assignee', selected: @issue.assignee_id, null_user: true, first_user: true)
|
||||
|
||||
%div.prepend-top-20.clearfix
|
||||
.issuable-context-title
|
||||
|
|
|
@ -24,11 +24,11 @@
|
|||
.issues-other-filters
|
||||
.filter-item.inline
|
||||
= users_select_tag(:assignee_id, selected: params[:assignee_id],
|
||||
placeholder: 'Assignee', class: 'trigger-submit', any_user: true, null_user: true)
|
||||
placeholder: 'Assignee', class: 'trigger-submit', any_user: true, null_user: true, first_user: true)
|
||||
|
||||
.filter-item.inline
|
||||
= users_select_tag(:author_id, selected: params[:author_id],
|
||||
placeholder: 'Author', class: 'trigger-submit', any_user: true)
|
||||
placeholder: 'Author', class: 'trigger-submit', any_user: true, first_user: true)
|
||||
|
||||
.filter-item.inline.milestone-filter
|
||||
= select_tag('milestone_id', projects_milestones_options, class: "select2 trigger-submit", prompt: 'Milestone')
|
||||
|
|
|
@ -25,6 +25,12 @@ Feature: Project Issues
|
|||
Given I click link "Release 0.4"
|
||||
Then I should see issue "Release 0.4"
|
||||
|
||||
@javascript
|
||||
Scenario: I visit issue page
|
||||
Given I add a user to project "Shop"
|
||||
And I click "author" dropdown
|
||||
Then I see current user as the first user
|
||||
|
||||
Scenario: I submit new unassigned issue
|
||||
Given I click link "New Issue"
|
||||
And I submit new issue "500 error on profile"
|
||||
|
|
|
@ -59,6 +59,18 @@ class Spinach::Features::ProjectIssues < Spinach::FeatureSteps
|
|||
click_link "New Issue"
|
||||
end
|
||||
|
||||
step 'I click "author" dropdown' do
|
||||
first('.ajax-users-select').click
|
||||
end
|
||||
|
||||
step 'I see current user as the first user' do
|
||||
expect(page).to have_selector('.user-result', visible: true, count: 4)
|
||||
users = page.all('.user-name')
|
||||
users[0].text.should == 'Any'
|
||||
users[1].text.should == 'Unassigned'
|
||||
users[2].text.should == current_user.name
|
||||
end
|
||||
|
||||
step 'I submit new issue "500 error on profile"' do
|
||||
fill_in "issue_title", with: "500 error on profile"
|
||||
click_button "Submit new issue"
|
||||
|
|
|
@ -14,6 +14,13 @@ module SharedProject
|
|||
@project.team << [@user, :master]
|
||||
end
|
||||
|
||||
# Add another user to project "Shop"
|
||||
step 'I add a user to project "Shop"' do
|
||||
@project = Project.find_by(name: "Shop")
|
||||
other_user = create(:user, name: 'Alpha')
|
||||
@project.team << [other_user, :master]
|
||||
end
|
||||
|
||||
# Create another specific project called "Forum"
|
||||
step 'I own project "Forum"' do
|
||||
@project = Project.find_by(name: "Forum")
|
||||
|
|
Loading…
Reference in a new issue