From 8a97b384405468bef588171615bd87c33dc02c4e Mon Sep 17 00:00:00 2001
From: Ron Lucke <lucke@elan-ev.de>
Date: Tue, 7 Jan 2025 10:15:48 +0000
Subject: [PATCH] Courseware Block sortieren ist nicht persistent

Closes #5097

Merge request studip/studip!3813
---
 .../containers/CoursewareAccordionContainer.vue    |  2 +-
 .../containers/CoursewareListContainer.vue         |  1 +
 .../containers/CoursewareTabsContainer.vue         |  2 +-
 resources/vue/mixins/courseware/container.js       | 14 +++++++-------
 4 files changed, 10 insertions(+), 9 deletions(-)

diff --git a/resources/vue/components/courseware/containers/CoursewareAccordionContainer.vue b/resources/vue/components/courseware/containers/CoursewareAccordionContainer.vue
index 861db7bd419..18e6a4a4844 100644
--- a/resources/vue/components/courseware/containers/CoursewareAccordionContainer.vue
+++ b/resources/vue/components/courseware/containers/CoursewareAccordionContainer.vue
@@ -59,7 +59,7 @@
                             :data-section-id="index"
                         >
                             <template #item="{element, index}">
-                                <li class="cw-block-item cw-block-item-sortable">
+                                <li class="cw-block-item cw-block-item-sortable" :data-block-id="element.id">
                                     <span
                                         :class="{ 'cw-sortable-handle-dragging': isDragging }"
                                         class="cw-sortable-handle"
diff --git a/resources/vue/components/courseware/containers/CoursewareListContainer.vue b/resources/vue/components/courseware/containers/CoursewareListContainer.vue
index fea378a4a98..1a8cbf28b97 100644
--- a/resources/vue/components/courseware/containers/CoursewareListContainer.vue
+++ b/resources/vue/components/courseware/containers/CoursewareListContainer.vue
@@ -44,6 +44,7 @@
                         <template #item="{element}">
                             <li
                                 class="cw-block-item cw-block-item-sortable"
+                                :data-block-id="element.id"
                             >
                                 <span
                                     :class="{ 'cw-sortable-handle-dragging': isDragging }"
diff --git a/resources/vue/components/courseware/containers/CoursewareTabsContainer.vue b/resources/vue/components/courseware/containers/CoursewareTabsContainer.vue
index 7b32bf9254e..4e3440f0d23 100644
--- a/resources/vue/components/courseware/containers/CoursewareTabsContainer.vue
+++ b/resources/vue/components/courseware/containers/CoursewareTabsContainer.vue
@@ -66,7 +66,7 @@
                                 :data-section-id="sectionIndex"
                             >
                                 <template #item="{element}">
-                                    <li class="cw-block-item cw-block-item-sortable">
+                                    <li class="cw-block-item cw-block-item-sortable" :data-block-id="element.id">
                                         <span
                                             :class="{ 'cw-sortable-handle-dragging': isDragging }"
                                             class="cw-sortable-handle"
diff --git a/resources/vue/mixins/courseware/container.js b/resources/vue/mixins/courseware/container.js
index df3ab09b86e..b1db1b2d92f 100644
--- a/resources/vue/mixins/courseware/container.js
+++ b/resources/vue/mixins/courseware/container.js
@@ -39,16 +39,16 @@ const containerMixin = {
         dropBlock(e) {
             this.isDragging = false; // implemented by each container type
             let data = {};
-            data.originContainerId = e.from.__vnode.ctx.attrs.containerId;
-            data.targetContainerId = e.to.__vnode.ctx.attrs.containerId;
+            data.originContainerId = e.from.dataset.containerId;
+            data.targetContainerId = e.to.dataset.containerId;
             if (data.originContainerId === data.targetContainerId) {
                 this.storeSort(); // implemented by each container type
             } else {
-                data.originSectionId = e.from.__vnode.ctx.attrs.sectionId;
-                data.originSectionBlockList = e.from.__vnode.children.map(b => { return b.ctx.attrs.blockId; });
-                data.targetSectionId = e.to.__vnode.ctx.attrs.sectionId;
-                data.targetSectionBlockList = e.to.__vnode.children.map(b => { return b.ctx.attrs.blockId; });
-                data.blockId = e.item._underlying_vm_.id;
+                data.originSectionId = e.from.dataset.sectionId;
+                data.originSectionBlockList = [...e.from.children].map(b => b.dataset.blockId);
+                data.targetSectionId = e.to.dataset.sectionId;
+                data.targetSectionBlockList = [...e.to.children].map(b => b.dataset.blockId);
+                data.blockId = e.item.dataset.blockId;
                 data.newPos = e.newIndex;
                 const indexInBlockList = data.targetSectionBlockList.findIndex(b => b === data.blockId);
                 data.targetSectionBlockList.splice(data.newPos, 0, data.targetSectionBlockList.splice(indexInBlockList,1)[0]); // move block id to new position
-- 
GitLab