diff --git a/app/controllers/experiments_controller.rb b/app/controllers/experiments_controller.rb index 43733d2d4..0ba9be272 100644 --- a/app/controllers/experiments_controller.rb +++ b/app/controllers/experiments_controller.rb @@ -462,7 +462,7 @@ class ExperimentsController < ApplicationController .joins(:my_modules) .where(experiments: { id: readable_experiments }) .where(my_modules: { id: assignable_my_modules }) - .search(current_user, false, params[:query], 1, current_team) + .search(current_user, false, params[:query], -1, current_team) .distinct .pluck(:id, :name) diff --git a/app/controllers/my_modules_controller.rb b/app/controllers/my_modules_controller.rb index 3eddeb756..e169fa272 100644 --- a/app/controllers/my_modules_controller.rb +++ b/app/controllers/my_modules_controller.rb @@ -466,7 +466,7 @@ class MyModulesController < ApplicationController my_modules = experiment.my_modules .where(my_modules: { id: assignable_my_modules }) .distinct - .search(current_user, false, params[:query], 1, current_team) + .search(current_user, false, params[:query], -1, current_team) .pluck(:id, :name) return render plain: [].to_json if my_modules.blank? diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 66d8a51a1..c2dc64967 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -114,7 +114,7 @@ class ProjectsController < ApplicationController .joins(experiments: :my_modules) .where(experiments: { id: readable_experiments }) .where(my_modules: { id: assignable_my_modules }) - .search(current_user, false, params[:query], 1, current_team) + .search(current_user, false, params[:query], -1, current_team) .distinct .pluck(:id, :name) diff --git a/app/javascript/packs/vue/assign_items_to_task_modal.js b/app/javascript/packs/vue/assign_items_to_task_modal.js index 2cc783622..ab7ddad48 100644 --- a/app/javascript/packs/vue/assign_items_to_task_modal.js +++ b/app/javascript/packs/vue/assign_items_to_task_modal.js @@ -1,8 +1,11 @@ import TurbolinksAdapter from 'vue-turbolinks'; import Vue from 'vue/dist/vue.esm'; import AssignItemsToTaskModalContainer from '../../vue/assign_items_to_tasks_modal/container.vue'; +import PerfectScrollbar from 'vue2-perfect-scrollbar'; +import 'vue2-perfect-scrollbar/dist/vue2-perfect-scrollbar.css'; Vue.use(TurbolinksAdapter); +Vue.use(PerfectScrollbar); Vue.prototype.i18n = window.I18n; function initAssignItemsToTaskModalComponent() { diff --git a/app/javascript/vue/shared/select.vue b/app/javascript/vue/shared/select.vue index 132ae5b26..198f3cc9a 100644 --- a/app/javascript/vue/shared/select.vue +++ b/app/javascript/vue/shared/select.vue @@ -6,11 +6,15 @@ -
+ -
+ + @@ -41,7 +45,8 @@ data() { return { isOpen: false, - optionPositionStyle: '' + optionPositionStyle: '', + blurPrevented: false } }, computed: { @@ -58,13 +63,27 @@ document.addEventListener("scroll", this.updateOptionPosition); }, methods: { + preventBlur() { + this.blurPrevented = true; + }, + allowBlur() { + setTimeout(() => { this.blurPrevented = false }, 200); + }, blur() { setTimeout(() => { - this.isOpen = false; - this.$emit('blur'); + if (this.blurPrevented) { + this.focusElement.focus(); + } else { + this.isOpen = false; + this.$emit('blur'); + } }, 200); }, toggle() { + if (this.isOpen && this.blurPrevented) { + return; + } + this.isOpen = !this.isOpen; if (this.isOpen) { @@ -74,6 +93,10 @@ }); this.$refs.optionsContainer.scrollTop = 0; this.updateOptionPosition(); + setTimeout(() => { + this.$refs.optionsContainer.$el.querySelector('.ps__thumb-y').addEventListener('mousedown', this.preventBlur); + this.$refs.optionsContainer.$el.querySelector('.ps__thumb-y').addEventListener('mouseup', this.allowBlur); + }, 100); } else { this.optionPositionStyle = ''; this.$emit('close');