From ea850b5bdbf10c53f7df093130c6dc95d9d51c29 Mon Sep 17 00:00:00 2001
From: Ron Lucke <lucke@elan-ev.de>
Date: Fri, 22 Apr 2022 07:56:56 +0000
Subject: [PATCH] fix #904

Closes #904
---
 .../courseware/CoursewareDialogCardsBlock.vue |  8 ++++++--
 .../components/courseware/CoursewareTabs.vue  | 19 +++++++++++++++++++
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/resources/vue/components/courseware/CoursewareDialogCardsBlock.vue b/resources/vue/components/courseware/CoursewareDialogCardsBlock.vue
index 5c013d93d0d..ad695dabe3b 100755
--- a/resources/vue/components/courseware/CoursewareDialogCardsBlock.vue
+++ b/resources/vue/components/courseware/CoursewareDialogCardsBlock.vue
@@ -59,6 +59,7 @@
                 <button class="button add" @click="addCard"><translate>Karte hinzufügen</translate></button>
                 <courseware-tabs
                     v-if="currentCards.length > 0"
+                    :setSelected="setCardTab"
                     @selectTab="activateCard(parseInt($event.name.replace($gettext('Karte') +  ' ', '')) - 1)"
                 >
                     <courseware-tab
@@ -137,6 +138,7 @@ export default {
         return {
             showEdit: false,
             currentCards: [],
+            setCardTab: 0
         };
     },
     computed: {
@@ -172,7 +174,7 @@ export default {
             if (this.cards !== '') {
                 this.currentCards = this.cards;
             }
-            this.activateCard(0);
+            this.setCardTab = 0;
         },
         setShowEdit(state) {
             this.showEdit = state;
@@ -219,7 +221,7 @@ export default {
             this.currentCards = this.currentCards.filter((val, index) => {
                 return !(index === cardIndex);
             });
-            this.activateCard(0);
+            this.$nextTick(() => { this.setCardTab = 0; });
         },
         flipCard(event) {
             event.currentTarget.classList.toggle('is-flipped');
@@ -231,6 +233,7 @@ export default {
                     if (view.currentCards.length > index + 1) {
                         card.active = false;
                         view.currentCards[index + 1].active = true;
+                        view.setCardTab = index + 1;
                     }
                     return false; // end every
                 } else {
@@ -245,6 +248,7 @@ export default {
                     if (index > 0) {
                         card.active = false;
                         view.currentCards[index - 1].active = true;
+                        view.setCardTab = index - 1;
                     }
                     return false; // end every
                 } else {
diff --git a/resources/vue/components/courseware/CoursewareTabs.vue b/resources/vue/components/courseware/CoursewareTabs.vue
index db2d7cca646..13a6b79d34d 100755
--- a/resources/vue/components/courseware/CoursewareTabs.vue
+++ b/resources/vue/components/courseware/CoursewareTabs.vue
@@ -29,6 +29,9 @@
 <script>
 export default {
     name: 'courseware-tabs',
+    props: {
+        setSelected: { type: Number, required: false, default: 0 }
+    },
     data() {
         return {
             tabs: [],
@@ -56,6 +59,17 @@ export default {
                 }
             });
         },
+        selectTabByIndex(selectedIndex) {
+            let view = this;
+            this.tabs.forEach((tab) => {
+                tab.isActive = false;
+                if (tab.index === selectedIndex) {
+                    tab.isActive = true;
+                    view.$refs[tab.selectorId][0].focus();
+                    view.$emit('selectTab', tab);
+                }
+            });
+        },
         handleKeyEvent(e) {
             let tablist = e.target.parentElement;
             switch (e.keyCode) {
@@ -114,6 +128,11 @@ export default {
             }
             return null;
         }
+    },
+    watch: {
+        setSelected(tab) {
+            this.selectTabByIndex(tab);
+        }
     }
 };
 </script>
-- 
GitLab