diff --git a/src/features/forms/components/inputs/badges/BadgesInput.vue b/src/features/forms/components/inputs/badges/BadgesInput.vue index 7be85dac087b807826ebffcd7d0f2a09c2ec8345..47571e46ed2cacc98dfbb12d69b9ba4e2d1ff939 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 62eac53f8d835e987ce480b77714b3119d5719b1..cd7cd745b7866540929285f4bf0cb4ab73b05464 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 ff2ea6f8531ba65851965af895766456aaa31bfa..faa5ac81add7e6b536a02411794b6066d286e0b5 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; }