From 78fa066dd16cb3eb31c090b42866d85a9fa68bea Mon Sep 17 00:00:00 2001
From: VIAUD Nathan <nathan.viaud@inria.fr>
Date: Wed, 8 Nov 2023 17:03:22 +0100
Subject: [PATCH] fix

---
 .../components/inputs/badges/BadgesInput.vue    |  4 ++--
 src/shared/services/badge.service.ts            | 17 +++++++++++++++++
 src/shared/services/graph.service.ts            | 10 ++++++----
 3 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/src/features/forms/components/inputs/badges/BadgesInput.vue b/src/features/forms/components/inputs/badges/BadgesInput.vue
index 7be85dac..47571e46 100644
--- a/src/features/forms/components/inputs/badges/BadgesInput.vue
+++ b/src/features/forms/components/inputs/badges/BadgesInput.vue
@@ -3,7 +3,7 @@ import BadgeItem from '@/src/features/badge/components/BadgeItem.vue';
 import AddBadge from './components/AddBadge.vue';
 import { computed, ComputedRef } from 'vue';
 import { Badge } from '@/src/shared/interfaces';
-import { addNewBadge, openBadge } from '@/src/shared/services';
+import { addNewBadge, isBadgeValid, openBadge } from '@/src/shared/services';
 
 const props = defineProps<{
     inputValue: string[];
@@ -37,7 +37,7 @@ const badges: ComputedRef<Badge[]> = computed(() => {
             v-for="(badge, index) in badges"
             :key="index"
             :badge="badge"
-            :invalid="Object.keys(badge.rule.and).length === 0"
+            :invalid="!isBadgeValid(badge)"
             @click="openBadge(badge.id)"
         />
     </div>
diff --git a/src/shared/services/badge.service.ts b/src/shared/services/badge.service.ts
index 62eac53f..cd7cd745 100644
--- a/src/shared/services/badge.service.ts
+++ b/src/shared/services/badge.service.ts
@@ -209,4 +209,21 @@ export async function saveCustomIcon(icon: string) {
     projectStore.addCustomIcon(iconPath);
 
     return iconPath;
+}
+
+export function isBadgeValid(badge): boolean {
+    return badge.rule.and.length > 0;
+}
+
+export function getValidBadges(){
+    const epocNode = findNode('1');
+    const badges = epocNode.data.formValues.badges;
+    if(!badges) return null;
+    
+    const res = {};
+    for(const badgeId in badges) {
+        if(isBadgeValid(badges[badgeId])) res[badgeId] = badges[badgeId];
+    }
+    
+    return res;
 }
\ No newline at end of file
diff --git a/src/shared/services/graph.service.ts b/src/shared/services/graph.service.ts
index ff2ea6f8..faa5ac81 100644
--- a/src/shared/services/graph.service.ts
+++ b/src/shared/services/graph.service.ts
@@ -21,7 +21,7 @@ import {
     setNodesSelectability
 } from '@/src/shared/services/graph';
 import { Question } from '@epoc/epoc-types/src/v2';
-import { createRule, getConditions } from '@/src/shared/services/badge.service';
+import { createRule, getConditions, getValidBadges } from '@/src/shared/services/badge.service';
 import { Badge, NodeElement } from '@/src/shared/interfaces';
 
 declare const api: ApiInterface;
@@ -58,7 +58,7 @@ function createContentJSON() : EpocV1 {
 
     const ePocNode = nodes.value.find((node) => { return node.type === 'epoc'; });
     const chapterNodes = nodes.value.filter((node) => { return node.type === 'chapter'; });
-    const badges = ePocNode.data.formValues.badges;
+    const validBadges = getValidBadges();
 
     const ePocValues = ePocNode.data.formValues;
 
@@ -93,8 +93,10 @@ function createContentJSON() : EpocV1 {
             pageNode = getNextNode(pageNode);
         }
     });
-
-    if(badges) epoc.badges = exportBadgesToPage(badges);
+    
+    if(validBadges) {
+        epoc.badges = exportBadgesToPage(validBadges);
+    }
 
     return epoc;
 }
-- 
GitLab