From 7d79ffa136516caf40479b7c2bc3747865d556ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Tue, 16 Sep 2025 13:02:17 +0200 Subject: [PATCH] Enhance person creation workflow: Add `onPersonCreated` event handling in `Create`, `CreateModal`, and `AddPersons`. Update type definitions and integrate event emission for streamlined person management. --- .../public/vuejs/OnTheFly/components/Create.vue | 8 ++++++-- .../vuejs/OnTheFly/components/CreateModal.vue | 7 ++++++- .../public/vuejs/_components/AddPersons.vue | 14 +++++++++++--- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/OnTheFly/components/Create.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/OnTheFly/components/Create.vue index 68548f859..ec94b2d88 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/OnTheFly/components/Create.vue +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/OnTheFly/components/Create.vue @@ -36,6 +36,7 @@ action="create" :query="query" ref="castPerson" + @onPersonCreated="(payload) => emit('onPersonCreated', payload)" /> (), { - allowedTypes: ["person", "thirdparty"], + allowedTypes: ["person"], action: "create", query: "", }); +const emit = defineEmits<{ + (e: "onPersonCreated", payload: { person: Person }): void; +}>(); const type = ref(null); diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/OnTheFly/components/CreateModal.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/OnTheFly/components/CreateModal.vue index e1ece548f..e83db6caf 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/OnTheFly/components/CreateModal.vue +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/OnTheFly/components/CreateModal.vue @@ -4,8 +4,12 @@ import Create from "ChillMainAssets/vuejs/OnTheFly/components/Create.vue"; import { CreateComponentConfig } from "ChillMainAssets/types"; import {trans, SAVE} from "translator"; import {useTemplateRef} from "vue"; +import {Person} from "ChillPersonAssets/types"; -const emit = defineEmits<(e: "close") => void>(); +const emit = defineEmits<{ + (e: "onPersonCreated", payload: { person: Person }): void; + (e: "close"): void; +}>(); const props = defineProps(); const modalDialogClass = { "modal-xl": true, "modal-scrollable": true }; @@ -40,6 +44,7 @@ defineExpose({save}) :allowedTypes="props.allowedTypes" :action="props.action" :query="props.query" + @onPersonCreated="(payload) => emit('onPersonCreated', payload)" > diff --git a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AddPersons.vue b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AddPersons.vue index 87c88aeb1..2d118c371 100644 --- a/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AddPersons.vue +++ b/src/Bundle/ChillPersonBundle/Resources/public/vuejs/_components/AddPersons.vue @@ -26,6 +26,7 @@ :allowed-types="creatableEntityTypes" :query="query" @close="closeModalCreate" + @onPersonCreated="onPersonCreated" > @@ -36,7 +37,7 @@ import type { Suggestion, SearchOptions, CreatableEntityType, - EntityType, + EntityType, Person, } from "ChillPersonAssets/types"; import { marked } from "marked"; import options = marked.options; @@ -49,14 +50,14 @@ interface AddPersonsConfig { modalTitle: string; options: SearchOptions; allowCreate?: boolean; - types?: EntityType | undefined; + types?: EntityType[] | undefined; } const props = withDefaults(defineProps(), { suggested: () => [], selected: () => [], allowCreate: () => true, - types: () => undefined, + types: () => ["person"], }); const emit = @@ -108,6 +109,13 @@ function closeModalChoose() { function closeModalCreate() { showModalCreate.value = false; } + +function onPersonCreated(payload: { person: Person }) { + console.log("onPersonCreated", payload); + showModalCreate.value = false; + const suggestion = {result: payload.person, relevance: 999999, key: "person"}; + emit("addNewPersons", {selected: [suggestion]}); +}