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) {