Fix moving result elements [SCI-9430]

This commit is contained in:
Ivan Kljun 2023-10-09 14:54:22 +02:00
parent 8e420181ac
commit 7c0e8221c1
6 changed files with 6 additions and 21 deletions

View file

@ -108,7 +108,7 @@
<component <component
v-for="(element, index) in orderedElements" v-for="(element, index) in orderedElements"
:is="elements[index].attributes.orderable_type" :is="elements[index].attributes.orderable_type"
:key="index" :key="element.id"
:element.sync="elements[index]" :element.sync="elements[index]"
:inRepository="inRepository" :inRepository="inRepository"
:reorderElementUrl="elements.length > 1 ? urls.reorder_elements_url : ''" :reorderElementUrl="elements.length > 1 ? urls.reorder_elements_url : ''"

View file

@ -86,7 +86,7 @@
@close="closeReorderModal" @close="closeReorderModal"
/> />
<div class="collapse in pl-10" :id="'resultBody' + result.id"> <div class="collapse in pl-10" :id="'resultBody' + result.id">
<div v-for="(element, index) in orderedElements" :key="index"> <div v-for="(element, index) in orderedElements" :key="element.id">
<component <component
:is="elements[index].attributes.orderable_type" :is="elements[index].attributes.orderable_type"
:element.sync="elements[index]" :element.sync="elements[index]"
@ -427,7 +427,7 @@
}, },
moveElement(position, target_id) { moveElement(position, target_id) {
this.elements.splice(position, 1) this.elements.splice(position, 1)
let unorderedElements = this.elements.map( e => { this.elements.map( e => {
if (e.attributes.position >= position) { if (e.attributes.position >= position) {
e.attributes.position -= 1; e.attributes.position -= 1;
} }

View file

@ -4,7 +4,7 @@
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="sn-icon sn-icon-close"></i></button> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="sn-icon sn-icon-close"></i></button>
<h4 class="modal-title" id="modal-destroy-team-label"> <h4 class="modal-title" id="modal-delete-result-element">
{{ i18n.t('protocols.steps.modals.delete_element.title')}} {{ i18n.t('protocols.steps.modals.delete_element.title')}}
</h4> </h4>
</div> </div>

View file

@ -4,7 +4,7 @@
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="sn-icon sn-icon-close"></i></button> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="sn-icon sn-icon-close"></i></button>
<h4 class="modal-title" id="modal-destroy-team-label"> <h4 class="modal-title" id="modal-move-result-element">
{{ i18n.t(`protocols.steps.modals.move_element.${parent_type}.title`) }} {{ i18n.t(`protocols.steps.modals.move_element.${parent_type}.title`) }}
</h4> </h4>
</div> </div>

View file

@ -4,7 +4,7 @@
<div class="modal-content"> <div class="modal-content">
<div class="modal-header"> <div class="modal-header">
<button type="button" class="close" @click="cancel" aria-label="Close"><i class="sn-icon sn-icon-close"></i></button> <button type="button" class="close" @click="cancel" aria-label="Close"><i class="sn-icon sn-icon-close"></i></button>
<h4 class="modal-title" id="modal-destroy-team-label"> <h4 class="modal-title" id="modal-table-name">
{{ i18n.t('protocols.steps.table.name_modal.title')}} {{ i18n.t('protocols.steps.table.name_modal.title')}}
</h4> </h4>
</div> </div>

View file

@ -4,8 +4,6 @@ class ResultOrderableElement < ApplicationRecord
validates :position, uniqueness: { scope: :result } validates :position, uniqueness: { scope: :result }
validate :check_result_relations validate :check_result_relations
around_destroy :decrement_following_elements_positions
belongs_to :result, inverse_of: :result_orderable_elements, touch: true belongs_to :result, inverse_of: :result_orderable_elements, touch: true
belongs_to :orderable, polymorphic: true, inverse_of: :result_orderable_element belongs_to :orderable, polymorphic: true, inverse_of: :result_orderable_element
acts_as_list scope: :result, top_of_list: 0, sequential_updates: true acts_as_list scope: :result, top_of_list: 0, sequential_updates: true
@ -20,17 +18,4 @@ class ResultOrderableElement < ApplicationRecord
) )
end end
end end
def decrement_following_elements_positions
result.with_lock do
yield
result.result_orderable_elements
.where('position > ?', position)
.order(position: :asc).each do |result_orderable_element|
# find_each ignore any ordering
result_orderable_element.position -= 1
result_orderable_element.save!
end
end
end
end end