Fix issues with assign to task dropdowns [SCI-8588] (#5568)

This commit is contained in:
artoscinote 2023-06-06 15:31:40 +02:00 committed by GitHub
parent 98e1962372
commit 98cb0df46b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 36 additions and 10 deletions

View file

@ -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)

View file

@ -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?

View file

@ -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)

View file

@ -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() {

View file

@ -6,11 +6,15 @@
</button>
<span class="sn-select__caret caret"></span>
</slot>
<div ref="optionsContainer" class="sn-select__options" :style="optionPositionStyle">
<perfect-scrollbar
ref="optionsContainer"
class="sn-select__options"
:style="optionPositionStyle"
>
<template v-if="options.length">
<div
v-for="option in options"
:key="option[0]" @click="setValue(option[0])"
:key="option[0]" @mousedown.stop="setValue(option[0])"
class="sn-select__option"
>
{{ option[1] }}
@ -22,8 +26,8 @@
>
{{ this.noOptionsPlaceholder }}
</div>
</template>
</div>
</template>
</perfect-scrollbar>
</div>
</template>
@ -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');