From 52c3a703fbfdcaa918d11b1dbb2cfc3b70a95c22 Mon Sep 17 00:00:00 2001
From: Ron Lucke <lucke@elan-ev.de>
Date: Tue, 12 Oct 2021 07:29:08 +0000
Subject: [PATCH] Biest#292

---
 .../courseware/CoursewareAccordionContainer.vue  | 16 +++++++++++++---
 .../courseware/CoursewareCollapsibleBox.vue      |  2 +-
 .../courseware/CoursewareListContainer.vue       |  1 +
 .../courseware/CoursewareTabsContainer.vue       | 10 ++++++----
 4 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/resources/vue/components/courseware/CoursewareAccordionContainer.vue b/resources/vue/components/courseware/CoursewareAccordionContainer.vue
index 3f99e9b5a23..17f8d01996a 100755
--- a/resources/vue/components/courseware/CoursewareAccordionContainer.vue
+++ b/resources/vue/components/courseware/CoursewareAccordionContainer.vue
@@ -121,8 +121,7 @@ export default {
             unlockObject: 'unlockObject',
         }),
         initCurrentData() {
-            // clone container to make edit reversible
-            this.currentContainer = JSON.parse(JSON.stringify(this.container));
+            this.currentContainer = _.cloneDeep(this.container);
 
             let view = this;
             let sections = this.currentContainer.attributes.payload.sections;
@@ -157,6 +156,9 @@ export default {
             this.currentContainer.attributes.payload.sections.splice(index, 1);
         },
         async storeContainer() {
+            this.currentContainer.attributes.payload.sections.forEach(section => {
+                section.blocks = section.blocks.map((block) => {return block.id;});
+            });
             await this.updateContainer({
                 container: this.currentContainer,
                 structuralElementId: this.currentContainer.relationships['structural-element'].data.id,
@@ -165,7 +167,10 @@ export default {
             this.initCurrentData();
         },
         component(block) {
-            return 'courseware-' + block.attributes["block-type"] + '-block';
+            if (block.attributes) {
+                return 'courseware-' + block.attributes["block-type"] + '-block';
+            }
+            return null;
         },
         updateContent(blockAdder) {
             if(blockAdder.container.id === this.container.id) {
@@ -173,5 +178,10 @@ export default {
             }
         }
     },
+    watch: {
+        blocks() {
+            this.initCurrentData();
+        }
+    }
 };
 </script>
diff --git a/resources/vue/components/courseware/CoursewareCollapsibleBox.vue b/resources/vue/components/courseware/CoursewareCollapsibleBox.vue
index 70bcf03fa3f..9021e2e1ec3 100755
--- a/resources/vue/components/courseware/CoursewareCollapsibleBox.vue
+++ b/resources/vue/components/courseware/CoursewareCollapsibleBox.vue
@@ -1,7 +1,7 @@
 <template>
     <div class="cw-collapsible" :class="{ 'cw-collapsible-open': isOpen }">
         <header :class="{ 'cw-collapsible-open': isOpen }" class="cw-collapsible-title" @click="isOpen = !isOpen">
-            <studip-icon v-if="icon !== ''" :shape="icon" /> {{ title }}
+            <studip-icon v-if="icon" :shape="icon" /> {{ title }}
         </header>
         <div class="cw-collapsible-content" :class="{ 'cw-collapsible-content-open': isOpen }">
             <slot></slot>
diff --git a/resources/vue/components/courseware/CoursewareListContainer.vue b/resources/vue/components/courseware/CoursewareListContainer.vue
index 096befe2b8e..ed60f824e74 100755
--- a/resources/vue/components/courseware/CoursewareListContainer.vue
+++ b/resources/vue/components/courseware/CoursewareListContainer.vue
@@ -56,6 +56,7 @@ export default {
             if (block.attributes["block-type"] !== undefined) {
                 return 'courseware-' + block.attributes["block-type"] + '-block';
             }
+            return null;
         },
     },
     mounted() {},
diff --git a/resources/vue/components/courseware/CoursewareTabsContainer.vue b/resources/vue/components/courseware/CoursewareTabsContainer.vue
index d14503e3d95..f8502bd8542 100755
--- a/resources/vue/components/courseware/CoursewareTabsContainer.vue
+++ b/resources/vue/components/courseware/CoursewareTabsContainer.vue
@@ -128,8 +128,7 @@ export default {
             unlockObject: 'unlockObject',
         }),
         initCurrentData() {
-            // clone container to make edit reversible
-            this.currentContainer = JSON.parse(JSON.stringify(this.container));
+            this.currentContainer = _.cloneDeep(this.container);
 
             let view = this;
             let sections = this.currentContainer.attributes.payload.sections;
@@ -164,6 +163,10 @@ export default {
             this.currentContainer.attributes.payload.sections.splice(index, 1);
         },
         async storeContainer() {
+            this.currentContainer.attributes.payload.sections.forEach(section => {
+                section.blocks = section.blocks.map((block) => {return block.id;});
+            });
+
             await this.updateContainer({
                 container: this.currentContainer,
                 structuralElementId: this.currentContainer.relationships['structural-element'].data.id,
@@ -174,9 +177,8 @@ export default {
         component(block) {
             if (block.attributes) {
                 return 'courseware-' + block.attributes["block-type"] + '-block';
-            } else {
-                console.debug(block);
             }
+            return null;
         },
         updateContent(blockAdder) {
             if(blockAdder.container.id === this.container.id) {
-- 
GitLab