Commit 1a848d83 authored by Jacob Schatz's avatar Jacob Schatz

Merge branch 'move-project-dropdown-async' into 'master'

Loads move issue dropdown async

To keep the style of the dropdown the same as the other dropdowns in the issue form, it uses select2 rather than our new dropdowns.

![dropdown](/uploads/e80d5f48440b2a49fd3ac13e74c1ba55/dropdown.gif)

Closes #16563

See merge request !4160
parents 9bdfc982 50a16c4b
...@@ -19,6 +19,7 @@ class @IssuableForm ...@@ -19,6 +19,7 @@ class @IssuableForm
@form.on "click", ".btn-cancel", @resetAutosave @form.on "click", ".btn-cancel", @resetAutosave
@initWip() @initWip()
@initMoveDropdown()
$issuableDueDate = $('#issuable-due-date') $issuableDueDate = $('#issuable-due-date')
...@@ -89,3 +90,19 @@ class @IssuableForm ...@@ -89,3 +90,19 @@ class @IssuableForm
addWip: -> addWip: ->
@titleField.val "WIP: #{@titleField.val()}" @titleField.val "WIP: #{@titleField.val()}"
initMoveDropdown: ->
$moveDropdown = $('.js-move-dropdown')
if $moveDropdown.length
$('.js-move-dropdown').select2
ajax:
url: $moveDropdown.data('projects-url')
results: (data) ->
return {
results: data
}
formatResult: (project) ->
project.name_with_namespace
formatSelection: (project) ->
project.name_with_namespace
...@@ -31,6 +31,24 @@ class AutocompleteController < ApplicationController ...@@ -31,6 +31,24 @@ class AutocompleteController < ApplicationController
render json: @user, only: [:name, :username, :id], methods: [:avatar_url] render json: @user, only: [:name, :username, :id], methods: [:avatar_url]
end end
def projects
project = Project.find_by_id(params[:project_id])
projects = current_user.authorized_projects
projects = projects.select do |project|
current_user.can?(:admin_issue, project)
end
no_project = {
id: 0,
name_with_namespace: 'No project',
}
projects.unshift(no_project)
projects.delete(project)
render json: projects.to_json(only: [:id, :name_with_namespace], methods: :name_with_namespace)
end
private private
def find_users def find_users
......
...@@ -98,9 +98,7 @@ ...@@ -98,9 +98,7 @@
= label_tag :move_to_project_id, 'Move', class: 'control-label' = label_tag :move_to_project_id, 'Move', class: 'control-label'
.col-sm-10 .col-sm-10
.issuable-form-select-holder .issuable-form-select-holder
- projects = project_options(issuable, current_user, ability: :admin_issue) = hidden_field_tag :move_to_project_id, nil, class: 'js-move-dropdown', data: { placeholder: 'Select project', projects_url: autocomplete_projects_path(project_id: @project.id) }
= select_tag(:move_to_project_id, projects, include_blank: true,
class: 'select2', data: { placeholder: 'Select project' })
&nbsp; &nbsp;
%span{ data: { toggle: 'tooltip', placement: 'auto top' }, style: 'cursor: default', %span{ data: { toggle: 'tooltip', placement: 'auto top' }, style: 'cursor: default',
title: 'Moving an issue will copy the discussion to a different project and close it here. All participants will be notified of the new location.' } title: 'Moving an issue will copy the discussion to a different project and close it here. All participants will be notified of the new location.' }
......
...@@ -56,6 +56,7 @@ Rails.application.routes.draw do ...@@ -56,6 +56,7 @@ Rails.application.routes.draw do
# Autocomplete # Autocomplete
get '/autocomplete/users' => 'autocomplete#users' get '/autocomplete/users' => 'autocomplete#users'
get '/autocomplete/users/:id' => 'autocomplete#user' get '/autocomplete/users/:id' => 'autocomplete#user'
get '/autocomplete/projects' => 'autocomplete#projects'
# Emojis # Emojis
resources :emojis, only: :index resources :emojis, only: :index
......
...@@ -19,7 +19,7 @@ feature 'issue move to another project' do ...@@ -19,7 +19,7 @@ feature 'issue move to another project' do
end end
scenario 'moving issue to another project not allowed' do scenario 'moving issue to another project not allowed' do
expect(page).to have_no_select('move_to_project_id') expect(page).to have_no_selector('#move_to_project_id')
end end
end end
...@@ -37,7 +37,7 @@ feature 'issue move to another project' do ...@@ -37,7 +37,7 @@ feature 'issue move to another project' do
end end
scenario 'moving issue to another project' do scenario 'moving issue to another project' do
select(new_project.name_with_namespace, from: 'move_to_project_id') first('#move_to_project_id', visible: false).set(new_project.id)
click_button('Save changes') click_button('Save changes')
expect(current_url).to include project_path(new_project) expect(current_url).to include project_path(new_project)
...@@ -47,14 +47,18 @@ feature 'issue move to another project' do ...@@ -47,14 +47,18 @@ feature 'issue move to another project' do
expect(page).to have_content(issue.title) expect(page).to have_content(issue.title)
end end
context 'projects user does not have permission to move issue to exist' do context 'user does not have permission to move the issue to a project', js: true do
let!(:private_project) { create(:project, :private) } let!(:private_project) { create(:project, :private) }
let(:another_project) { create(:project) } let(:another_project) { create(:project) }
background { another_project.team << [user, :guest] } background { another_project.team << [user, :guest] }
scenario 'browsing projects in projects select' do scenario 'browsing projects in projects select' do
options = [ '', 'No project', new_project.name_with_namespace ] click_link 'Select project'
expect(page).to have_select('move_to_project_id', options: options)
page.within '.select2-results' do
expect(page).to have_content 'No project'
expect(page).to have_content new_project.name_with_namespace
end
end end
end end
...@@ -65,7 +69,7 @@ feature 'issue move to another project' do ...@@ -65,7 +69,7 @@ feature 'issue move to another project' do
end end
scenario 'user wants to move issue that has already been moved' do scenario 'user wants to move issue that has already been moved' do
expect(page).to have_no_select('move_to_project_id') expect(page).to have_no_selector('#move_to_project_id')
end end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment