From 2898085c9dee8fd9c561178f5b0956159f2faee4 Mon Sep 17 00:00:00 2001
From: Ron Lucke <lucke@elan-ev.de>
Date: Fri, 5 Jul 2024 14:03:21 +0000
Subject: [PATCH] fix #4344

Closes #4344

Merge request studip/studip!3172
---
 .../containers/CoursewareTabsContainer.vue        | 15 ++++++++++++++-
 resources/vue/mixins/courseware/container.js      |  6 ++++--
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/resources/vue/components/courseware/containers/CoursewareTabsContainer.vue b/resources/vue/components/courseware/containers/CoursewareTabsContainer.vue
index fd7450c7797..e9c45ca4fe6 100644
--- a/resources/vue/components/courseware/containers/CoursewareTabsContainer.vue
+++ b/resources/vue/components/courseware/containers/CoursewareTabsContainer.vue
@@ -24,7 +24,7 @@
                     {{ $gettext('Drücken Sie die Leertaste, um neu anzuordnen.') }}
                 </span>
             </template>
-            <courseware-tabs>
+            <courseware-tabs @selectTab="selectTabHandler">
                 <courseware-tab
                     v-for="(section, index) in currentSections"
                     :key="index"
@@ -205,6 +205,7 @@ export default {
             loadContainer: 'courseware-containers/loadById',
             lockObject: 'lockObject',
             unlockObject: 'unlockObject',
+            storeContainerRecord: 'courseware-containers/storeRecord'
         }),
         initCurrentData() {
             this.currentContainer = _.cloneDeep(this.container);
@@ -402,6 +403,18 @@ export default {
                     , {blockTitle: block.attributes.title, pos: currentIndex + 1, listLength: this.currentSections[sectionIndex].blocks.length}
                 );
             this.storeSort();
+        },
+        selectTabHandler(event) {
+            const tabIndex = event.index;
+            let container = _.cloneDeep(this.container);
+            container.activeSection = tabIndex;
+            this.storeContainerRecord(container);
+            if (this.blockAdder.container.id === this.container.id) {
+                this.setAdderStorage({
+                    container: this.container,
+                    section: tabIndex
+                });
+            }
         }
     },
     watch: {
diff --git a/resources/vue/mixins/courseware/container.js b/resources/vue/mixins/courseware/container.js
index 2eb7549949e..de162f9d8f4 100644
--- a/resources/vue/mixins/courseware/container.js
+++ b/resources/vue/mixins/courseware/container.js
@@ -253,9 +253,11 @@ const containerMixin = {
             // choose the last container and its last section as the default adder slot
             // for adding blocks and containers via click
             if (this.containers) {
+                const lastContainer = this.containers[this.containers.length - 1];
+                const section = lastContainer.activeSection ?? 0;
                 this.setAdderStorage({
-                    container: this.containers[this.containers.length - 1],
-                    section: this.containers[this.containers.length - 1].attributes.payload.sections.length - 1
+                    container: lastContainer,
+                    section: section
                 });
             }
         },
-- 
GitLab