From 7c7e6939789da7010b762dc093f423b84cc10840 Mon Sep 17 00:00:00 2001
From: Bram Wiepjes <bramw@protonmail.com>
Date: Thu, 1 Aug 2024 17:16:30 +0200
Subject: [PATCH] Fix duplicating table and page in left sidebar

---
 .../sidebar/SidebarComponentBuilder.vue       | 19 +++++++++++++++++++
 .../database/components/sidebar/Sidebar.vue   | 19 +++++++++++++++++++
 2 files changed, 38 insertions(+)

diff --git a/web-frontend/modules/builder/components/sidebar/SidebarComponentBuilder.vue b/web-frontend/modules/builder/components/sidebar/SidebarComponentBuilder.vue
index 3461dda46..0e9f7a09f 100644
--- a/web-frontend/modules/builder/components/sidebar/SidebarComponentBuilder.vue
+++ b/web-frontend/modules/builder/components/sidebar/SidebarComponentBuilder.vue
@@ -25,6 +25,15 @@
             :page="page"
           ></SidebarItemBuilder>
         </ul>
+        <ul v-if="pendingJobs.length" class="tree__subs">
+          <component
+            :is="getPendingJobComponent(job)"
+            v-for="job in pendingJobs"
+            :key="job.id"
+            :job="job"
+          >
+          </component>
+        </ul>
         <a
           v-if="
             $hasPermission(
@@ -82,6 +91,13 @@ export default {
         .map((page) => page)
         .sort((a, b) => a.order - b.order)
     },
+    pendingJobs() {
+      return this.$store.getters['job/getAll'].filter((job) =>
+        this.$registry
+          .get('job', job.type)
+          .isJobPartOfApplication(job, this.application)
+      )
+    },
   },
   methods: {
     selected(application) {
@@ -102,6 +118,9 @@ export default {
         notifyIf(error, 'page')
       }
     },
+    getPendingJobComponent(job) {
+      return this.$registry.get('job', job.type).getSidebarComponent()
+    },
   },
 }
 </script>
diff --git a/web-frontend/modules/database/components/sidebar/Sidebar.vue b/web-frontend/modules/database/components/sidebar/Sidebar.vue
index c1fcef81c..f0804428c 100644
--- a/web-frontend/modules/database/components/sidebar/Sidebar.vue
+++ b/web-frontend/modules/database/components/sidebar/Sidebar.vue
@@ -39,6 +39,15 @@
           :table="table"
         ></SidebarItem>
       </ul>
+      <ul v-if="pendingJobs.length" class="tree__subs">
+        <component
+          :is="getPendingJobComponent(job)"
+          v-for="job in pendingJobs"
+          :key="job.id"
+          :job="job"
+        >
+        </component>
+      </ul>
       <a
         v-if="
           $hasPermission(
@@ -88,6 +97,13 @@ export default {
         .map((table) => table)
         .sort((a, b) => a.order - b.order)
     },
+    pendingJobs() {
+      return this.$store.getters['job/getAll'].filter((job) =>
+        this.$registry
+          .get('job', job.type)
+          .isJobPartOfApplication(job, this.application)
+      )
+    },
     ...mapGetters({ isAppSelected: 'application/isSelected' }),
   },
   methods: {
@@ -109,6 +125,9 @@ export default {
         notifyIf(error, 'table')
       }
     },
+    getPendingJobComponent(job) {
+      return this.$registry.get('job', job.type).getSidebarComponent()
+    },
   },
 }
 </script>