diff --git a/src/_colors.scss b/src/_colors.scss index 6ef64b1ed4e6cda2c40f433ba505f6377335dfe3..03eb6197150ad392c3da2472094a3d235ca9014d 100644 --- a/src/_colors.scss +++ b/src/_colors.scss @@ -26,6 +26,8 @@ $editor-blue: #00B3E9; $node-active: #E1F4FA; $editor-red: #E63312; +$editor-green: #00D957; + $editor-node-ghost: #D6E2F0; [color-scheme="light"] { @@ -61,4 +63,6 @@ $editor-node-ghost: #D6E2F0; --editor-red: #{$editor-red}; --inria-grey: #{$inria-grey}; --node-hover: #E9EFF6; + + --editor-green: #{$editor-green}; } \ No newline at end of file diff --git a/src/features/badge/components/ConditionElementSelector.vue b/src/features/badge/components/ConditionElementSelector.vue index 4a4e586fc4a4a6dc38d8cb2cc8be768d9046c1e2..7a29a2edf5ac855d3b76ce11cee3c178f2713c02 100644 --- a/src/features/badge/components/ConditionElementSelector.vue +++ b/src/features/badge/components/ConditionElementSelector.vue @@ -7,12 +7,7 @@ const props = defineProps<{ inputValue: string; }>(); -const emit = defineEmits<{ - (e: 'change'): void; -}>(); - function onClick() { - emit('change'); enterSelectNodeMode(props.index); } diff --git a/src/features/badge/components/ConditionItem.vue b/src/features/badge/components/ConditionItem.vue index a37d29d9af205b247b5bdefeded9cfac65301a32..d3ccd465290b24519f63bda9bdaf2a68ad19f6c3 100644 --- a/src/features/badge/components/ConditionItem.vue +++ b/src/features/badge/components/ConditionItem.vue @@ -84,7 +84,6 @@ function handleVerbChange(value: string) { :input-value="currentCondition.element" :index="conditionIndex" class="grid-item" - @change="resetValue(true, true)" /> <div class="select"> Condition diff --git a/src/features/ePocFlow/nodes/ActivityNode.vue b/src/features/ePocFlow/nodes/ActivityNode.vue index cc93d234c508ae1f7bfb17d1ace3d6b9f5ff835f..9351f11f98c37566ba5ffc068816eaf2d6193e69 100644 --- a/src/features/ePocFlow/nodes/ActivityNode.vue +++ b/src/features/ePocFlow/nodes/ActivityNode.vue @@ -97,6 +97,7 @@ const activityIndex = computed(() => { <small>{{ connectedBadges.length }}</small> </div> <DraggableNode + :id="currentNode.data.contentId" :parent-test-id="`activity-${activityIndex}`" :node-id="id" :contents="data.elements" diff --git a/src/features/ePocFlow/nodes/ChapterNode.vue b/src/features/ePocFlow/nodes/ChapterNode.vue index fd8c14b0d2edbb2e033dc3f1bb796647e5ce1311..f687ab2b6fadb591086c128f17454d1be644299d 100644 --- a/src/features/ePocFlow/nodes/ChapterNode.vue +++ b/src/features/ePocFlow/nodes/ChapterNode.vue @@ -72,6 +72,7 @@ const connectedBadges = computed(() => getConnectedBadges(currentNode.data.conte <small>{{ connectedBadges.length }}</small> </div> <ContentButton + :id="currentNode.data.contentId" :data-testid="`chapter-${chapterIndex}`" :icon="currentNode.data.action.icon" :is-draggable="false" diff --git a/src/features/ePocFlow/nodes/PageNode.vue b/src/features/ePocFlow/nodes/PageNode.vue index b8b84763caab2084fc918dcfea7959e0fa7e879e..11d0e02f7b41e72fc8ca875331d314dd64a0ce76 100644 --- a/src/features/ePocFlow/nodes/PageNode.vue +++ b/src/features/ePocFlow/nodes/PageNode.vue @@ -100,6 +100,7 @@ const pageIndex = computed(() => { <small>{{ connectedBadges.length }}</small> </div> <DraggableNode + :id="currentNode.data.contentId" :parent-test-id="`page-${pageIndex}`" :node-id="id" :contents="data.elements" diff --git a/src/features/ePocFlow/nodes/content/DraggableNode.vue b/src/features/ePocFlow/nodes/content/DraggableNode.vue index d2b82bcd6cb55670ab487389c45faa62ff9534f6..ea3aba7a163ea2caf72134d02c18936c96253195 100644 --- a/src/features/ePocFlow/nodes/content/DraggableNode.vue +++ b/src/features/ePocFlow/nodes/content/DraggableNode.vue @@ -131,6 +131,7 @@ function onContextMenu(contentId: string) { <small>{{ getConnectedBadges(element.contentId).length }}</small> </div> <ContentButton + :id="element.contentId" :data-testid="`${parentTestId}-${index}`" :icon="element.action.icon" :is-draggable="!isCondition && !editorStore.selectNodeMode" diff --git a/src/features/forms/components/inputs/badges/components/ConditionInput.vue b/src/features/forms/components/inputs/badges/components/ConditionInput.vue index 9d5931be1a9c9d9646c6dbb4fe73f29062500015..2d355870f80b8c9014b29e13990576968b0bc7df 100644 --- a/src/features/forms/components/inputs/badges/components/ConditionInput.vue +++ b/src/features/forms/components/inputs/badges/components/ConditionInput.vue @@ -21,13 +21,30 @@ function getPhrase(condition: Condition): { phrase: string, id: string} { return { phrase, id: condition.element }; } + +let hoveredElement = null; +function handleMouseEnter(condition: Condition) { + hoveredElement = document.getElementById(condition.element); + hoveredElement.classList.add('highlight'); +} + +function handleMouseLeave() { + hoveredElement.classList.remove('highlight'); + hoveredElement = null; +} + </script> <template> <ul v-if="conditions.length > 0"> <li v-for="(condition, index) of conditions" :key="index"> {{ getPhrase(condition).phrase }} - <a @click="goToElement(condition.element)">{{ condition.element }}</a> + <a + @mouseenter="handleMouseEnter(condition)" + @mouseleave="handleMouseLeave" + @click="goToElement(condition.element)"> + {{ condition.element }} + </a> </li> </ul> <button class="btn btn-form" @click="onClick"> diff --git a/src/global.scss b/src/global.scss index 284118bfff2863a9d67b1b105cee98d68f8b1796..3d62f2c01c6ac72fb16ae031f8f9a41ce2db1e4b 100644 --- a/src/global.scss +++ b/src/global.scss @@ -113,6 +113,10 @@ body, border: 2px solid var(--editor-blue); box-shadow: 0 1px 8px 0 var(--editor-blue-shadow); } + &.highlight { + color: var(--editor-green); + border: 2px solid var(--editor-green); + } } &-blue { background-color: var(--button-blue); @@ -243,10 +247,14 @@ hr { } &.active { - border: 1px solid var(--editor-blue); + border: 2px solid var(--editor-blue); box-shadow: 0 1px 8px 0 var(--editor-blue-shadow); background-color: var(--node-active); } + + &.highlight { + border: 2px solid var(--editor-green) !important; + } } .input { diff --git a/src/shared/services/graph.service.ts b/src/shared/services/graph.service.ts index b216ed926ac32053e4ef834d58cde0f385a41d41..ff2ea6f8531ba65851965af895766456aaa31bfa 100644 --- a/src/shared/services/graph.service.ts +++ b/src/shared/services/graph.service.ts @@ -299,8 +299,14 @@ export function exitSelectNodeMode(selectedId?: string): void { editorStore.exitSelectNodeMode(); setNodesSelectability(false); - editorStore.tempConditions[openedConditionIndex].elementType = getConditionType(selectedId); - editorStore.tempConditions[openedConditionIndex].element = getContentIdFromId(selectedId); + if(selectedId !== undefined) { + + if(openedConditionIndex) editorStore.resetTempCondition(openedConditionIndex); + + editorStore.tempConditions[openedConditionIndex].elementType = getConditionType(selectedId); + editorStore.tempConditions[openedConditionIndex].element = getContentIdFromId(selectedId); + } + enableGraph(); openedConditionIndex = null; diff --git a/src/shared/stores/editorStore.ts b/src/shared/stores/editorStore.ts index 2e0d8c8f5b3858477e5ea9e47cf47a08a60cae0b..cd52b901f51621f8f1162fee431db3bd74c62a96 100644 --- a/src/shared/stores/editorStore.ts +++ b/src/shared/stores/editorStore.ts @@ -228,5 +228,10 @@ export const useEditorStore = defineStore('editor', { exitSelectNodeMode(): void { this.selectNodeMode = false; }, + + resetTempCondition(index: number) { + this.tempConditions[index].verb = ''; + this.tempConditions[index].value = ''; + } } });