From 5793e5644aaf40abe620d8a0a4f76856b6c5ff83 Mon Sep 17 00:00:00 2001 From: Michael Kret <88898367+michael-radency@users.noreply.github.com> Date: Tue, 9 Apr 2024 11:33:26 +0300 Subject: [PATCH] feat: Append item index suffix to an error message, if provided, and node has many input items (#9070) --- .../src/components/Error/NodeErrorView.vue | 47 +++++++++++++------ 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/packages/editor-ui/src/components/Error/NodeErrorView.vue b/packages/editor-ui/src/components/Error/NodeErrorView.vue index bece533d88a37..63a3571aa1fa7 100644 --- a/packages/editor-ui/src/components/Error/NodeErrorView.vue +++ b/packages/editor-ui/src/components/Error/NodeErrorView.vue @@ -84,6 +84,10 @@ const n8nVersion = computed(() => { return rootStore.versionCli + ` (${instanceType})`; }); +const hasManyInputItems = computed(() => { + return ndvStore.ndvInputData.length > 1; +}); + const nodeDefaultName = computed(() => { const node = props.error?.node; if (!node) { @@ -214,33 +218,48 @@ function getErrorDescription(): string { ); } +function addItemIndexSuffix(message: string): string { + let itemIndexSuffix = ''; + + const ITEM_INDEX_SUFFIX_TEXT = '[item '; + + if ( + hasManyInputItems.value && + !message.includes(ITEM_INDEX_SUFFIX_TEXT) && + props.error?.context?.itemIndex !== undefined + ) { + itemIndexSuffix = ` [item ${props.error.context.itemIndex}]`; + } + + return message + itemIndexSuffix; +} + function getErrorMessage(): string { const baseErrorMessage = ''; + let message = ''; const isSubNodeError = props.error.name === 'NodeOperationError' && (props.error as NodeOperationError).functionality === 'configuration-node'; if (isSubNodeError) { - const baseErrorMessageSubNode = i18n.baseText('nodeErrorView.errorSubNode', { + message = i18n.baseText('nodeErrorView.errorSubNode', { interpolate: { node: props.error.node.name }, }); - return baseErrorMessageSubNode; - } + } else if ( + props.error.message === props.error.description || + !props.error.context?.messageTemplate + ) { + message = baseErrorMessage + props.error.message; + } else { + const parameterName = parameterDisplayName(props.error.context.parameter as string); - if (props.error.message === props.error.description) { - return baseErrorMessage; - } - if (!props.error.context?.messageTemplate) { - return baseErrorMessage + props.error.message; + message = + baseErrorMessage + + (props.error.context.messageTemplate as string).replace(/%%PARAMETER%%/g, parameterName); } - const parameterName = parameterDisplayName(props.error.context.parameter as string); - - return ( - baseErrorMessage + - (props.error.context.messageTemplate as string).replace(/%%PARAMETER%%/g, parameterName) - ); + return addItemIndexSuffix(message); } function parameterDisplayName(path: string, fullPath = true) {