From a256307b82204fb0b081058db979c58a596dd61c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Wed, 23 Oct 2024 13:44:31 +0200 Subject: [PATCH] Fix the triggering of the event goToGenerateWorkflow when relatedEntityId is not known The component PickWorkflow emitted the event "goToGenerateWorkflow" when the normal behaviour is intercepted. But that event generated the link to create the workflow to pass it in the payload's event. That generation failed, causing the whole event to fail. Now, if the link could not been generated, the link is a blank string. There is a supplementary parameter `isLinkValid`, boolean, inform if the link is valid or not. --- .../public/lib/entity-workflow/api.ts | 16 +++++++++++- .../EntityWorkflow/PickWorkflow.vue | 26 ++++++++++++++----- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/Bundle/ChillMainBundle/Resources/public/lib/entity-workflow/api.ts b/src/Bundle/ChillMainBundle/Resources/public/lib/entity-workflow/api.ts index 486421904..96c2901bb 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/lib/entity-workflow/api.ts +++ b/src/Bundle/ChillMainBundle/Resources/public/lib/entity-workflow/api.ts @@ -1,4 +1,18 @@ -export const buildLinkCreate = (workflowName: string, relatedEntityClass: string, relatedEntityId: number): string => { +/** + * Constructs a URL for creating a workflow link associated with a specific entity. + * + * @param {string} workflowName - The name of the workflow to associate. + * @param {string} relatedEntityClass - The class/type of the related entity. + * @param {number|undefined} relatedEntityId - The unique identifier of the related entity. Must be defined. + * + * @returns {string} The constructed URL containing query parameters based on the provided arguments. + * + * @throws {Error} If the related entity ID is undefined. + */ +export const buildLinkCreate = (workflowName: string, relatedEntityClass: string, relatedEntityId: number|undefined): string => { + if (typeof (relatedEntityId) === 'undefined') { + throw new Error("the related entity id is not set"); + } let params = new URLSearchParams(); params.set('entityClass', relatedEntityClass); params.set('entityId', relatedEntityId.toString(10)); diff --git a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/EntityWorkflow/PickWorkflow.vue b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/EntityWorkflow/PickWorkflow.vue index e429adf31..13d6c4e46 100644 --- a/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/EntityWorkflow/PickWorkflow.vue +++ b/src/Bundle/ChillMainBundle/Resources/public/vuejs/_components/EntityWorkflow/PickWorkflow.vue @@ -20,7 +20,13 @@ import {WorkflowAvailable} from "../../../types"; interface PickWorkflowConfig { relatedEntityClass: string; - relatedEntityId: number; + /** + * Represents the identifier of a related entity. + * This variable can store either a numerical value representing the entity's ID or an undefined value + * if the related entity is not specified or available, for instance when the entity is created within + * the interface and the id will be available later + */ + relatedEntityId: number|undefined; workflowsAvailables: WorkflowAvailable[]; preventDefaultMoveToGenerate: boolean; goToGenerateWorkflowPayload: object; @@ -29,20 +35,28 @@ interface PickWorkflowConfig { const props = withDefaults(defineProps(), {preventDefaultMoveToGenerate: false, goToGenerateWorkflowPayload: {}}); const emit = defineEmits<{ - (e: 'goToGenerateWorkflow', {event: MouseEvent, workflowName: string, link: string, payload: object}): void; + (e: 'goToGenerateWorkflow', {event: MouseEvent, workflowName: string, isLinkValid: boolean, link: string, payload: object}): void; }>(); const makeLink = (workflowName: string): string => buildLinkCreate(workflowName, props.relatedEntityClass, props.relatedEntityId); const goToGenerateWorkflow = (event: MouseEvent, workflowName: string): void => { console.log('goToGenerateWorkflow', event, workflowName); + let link = ''; + let isLinkValid = false; - if (!props.preventDefaultMoveToGenerate) { - console.log('to go generate'); - window.location.assign(makeLink(workflowName)); + try { + link = makeLink(workflowName); + isLinkValid = true; + } catch (e) { + console.info("could not generate link to create workflow, maybe the relatedEntityId is not yet known", e); } - emit('goToGenerateWorkflow', {event, workflowName, link: makeLink(workflowName), payload: props.goToGenerateWorkflowPayload}); + if (!props.preventDefaultMoveToGenerate) { + window.location.assign(link); + } + + emit('goToGenerateWorkflow', {event, workflowName, link, isLinkValid, payload: props.goToGenerateWorkflowPayload}); } const goToDuplicateRelatedEntity = (event: MouseEvent, workflowName: string): void => {