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
This commit is contained in:
commit
1a848d8354
5 changed files with 47 additions and 9 deletions
|
@ -19,6 +19,7 @@ class @IssuableForm
|
|||
@form.on "click", ".btn-cancel", @resetAutosave
|
||||
|
||||
@initWip()
|
||||
@initMoveDropdown()
|
||||
|
||||
$issuableDueDate = $('#issuable-due-date')
|
||||
|
||||
|
@ -89,3 +90,19 @@ class @IssuableForm
|
|||
|
||||
addWip: ->
|
||||
@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
|
|||
render json: @user, only: [:name, :username, :id], methods: [:avatar_url]
|
||||
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
|
||||
|
||||
def find_users
|
||||
|
|
|
@ -98,9 +98,7 @@
|
|||
= label_tag :move_to_project_id, 'Move', class: 'control-label'
|
||||
.col-sm-10
|
||||
.issuable-form-select-holder
|
||||
- projects = project_options(issuable, current_user, ability: :admin_issue)
|
||||
= select_tag(:move_to_project_id, projects, include_blank: true,
|
||||
class: 'select2', data: { placeholder: 'Select project' })
|
||||
= 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) }
|
||||
|
||||
%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.' }
|
||||
|
|
|
@ -56,6 +56,7 @@ Rails.application.routes.draw do
|
|||
# Autocomplete
|
||||
get '/autocomplete/users' => 'autocomplete#users'
|
||||
get '/autocomplete/users/:id' => 'autocomplete#user'
|
||||
get '/autocomplete/projects' => 'autocomplete#projects'
|
||||
|
||||
# Emojis
|
||||
resources :emojis, only: :index
|
||||
|
|
|
@ -19,7 +19,7 @@ feature 'issue move to another project' do
|
|||
end
|
||||
|
||||
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
|
||||
|
||||
|
@ -37,7 +37,7 @@ feature 'issue move to another project' do
|
|||
end
|
||||
|
||||
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')
|
||||
|
||||
expect(current_url).to include project_path(new_project)
|
||||
|
@ -47,14 +47,18 @@ feature 'issue move to another project' do
|
|||
expect(page).to have_content(issue.title)
|
||||
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(:another_project) { create(:project) }
|
||||
background { another_project.team << [user, :guest] }
|
||||
|
||||
scenario 'browsing projects in projects select' do
|
||||
options = [ '', 'No project', new_project.name_with_namespace ]
|
||||
expect(page).to have_select('move_to_project_id', options: options)
|
||||
click_link 'Select project'
|
||||
|
||||
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
|
||||
|
||||
|
@ -65,7 +69,7 @@ feature 'issue move to another project' do
|
|||
end
|
||||
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue