From d75d464135332f639bd275684109a89980718b75 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Tue, 27 Feb 2024 17:07:19 +0100 Subject: [PATCH] fix(front): fix adding tags to an event Closes #1419 Signed-off-by: Thomas Citharel --- src/components/Event/TagInput.vue | 39 +++++++++++++++++-------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/components/Event/TagInput.vue b/src/components/Event/TagInput.vue index 6a4c06f68..dad5c7b9c 100644 --- a/src/components/Event/TagInput.vue +++ b/src/components/Event/TagInput.vue @@ -14,7 +14,8 @@

import differenceBy from "lodash/differenceBy"; import { ITag } from "../../types/tag.model"; -import { computed, onBeforeMount, ref } from "vue"; +import { computed, onBeforeMount, ref, watch } from "vue"; import HelpCircleOutline from "vue-material-design-icons/HelpCircleOutline.vue"; import { useFetchTags } from "@/composition/apollo/tags"; import { FILTER_TAGS } from "@/graphql/tags"; @@ -44,6 +45,10 @@ const props = defineProps<{ modelValue: ITag[]; }>(); +const propsValue = computed(() => props.modelValue); + +const tagsStrings = ref([]); + const emit = defineEmits(["update:modelValue"]); const text = ref(""); @@ -77,7 +82,7 @@ const getFilteredTags = async (newText: string): Promise => { }; const filteredTags = computed((): ITag[] => { - return differenceBy(tags.value, props.modelValue, "id").filter( + return differenceBy(tags.value, propsValue.value, "id").filter( (option) => option.title.toString().toLowerCase().indexOf(text.value.toLowerCase()) >= 0 || @@ -86,19 +91,19 @@ const filteredTags = computed((): ITag[] => { ); }); -const tagsStrings = computed({ - get(): string[] { - return props.modelValue.map((tag: ITag) => tag.title); - }, - set(newTagsStrings: string[]) { - console.debug("tagsStrings", newTagsStrings); - const tagEntities = newTagsStrings.map((tag: string | ITag) => { - if (typeof tag !== "string") { - return tag; - } - return { title: tag, slug: tag } as ITag; - }); - emit("update:modelValue", tagEntities); - }, +watch(props.modelValue, (newValue, oldValue) => { + if (newValue != oldValue) { + tagsStrings.value = propsValue.value.map((tag: ITag) => tag.title); + } }); + +const updateTags = (newTagsStrings: string[]) => { + const tagEntities = newTagsStrings.map((tag: string | ITag) => { + if (typeof tag !== "string") { + return tag; + } + return { title: tag, slug: tag } as ITag; + }); + emit("update:modelValue", tagEntities); +};