diff --git a/packages/editor-ui/src/components/ResourceMapper/MatchingColumnsSelect.vue b/packages/editor-ui/src/components/ResourceMapper/MatchingColumnsSelect.vue index 1aa80a769f509..502d83af1abd7 100644 --- a/packages/editor-ui/src/components/ResourceMapper/MatchingColumnsSelect.vue +++ b/packages/editor-ui/src/components/ResourceMapper/MatchingColumnsSelect.vue @@ -93,6 +93,7 @@ const fieldDescription = computed(() => { resourceMapperTypeOptions.value?.multiKeyMatch === true ? `${pluralFieldWord.value}` : `${singularFieldWord.value}`, + nodeDisplayName: props.serviceName, }, }); }); diff --git a/packages/editor-ui/src/components/__tests__/ResourceMapper.test.ts b/packages/editor-ui/src/components/__tests__/ResourceMapper.test.ts index afc9a6cf03df6..96f627026eb2e 100644 --- a/packages/editor-ui/src/components/__tests__/ResourceMapper.test.ts +++ b/packages/editor-ui/src/components/__tests__/ResourceMapper.test.ts @@ -182,13 +182,18 @@ describe('ResourceMapper.vue', () => { }, { merge: true }, ); + await waitAllPromises(); expect(getByText('Set the value for each foo')).toBeInTheDocument(); expect( getByText('Look for incoming data that matches the foos in the service'), ).toBeInTheDocument(); expect(getByText('Foos to Match On')).toBeInTheDocument(); - expect(getByText('The foos that identify the row(s) to modify')).toBeInTheDocument(); + expect( + getByText( + 'The foos to use when matching rows in the service to the input items of this node. Usually an ID.', + ), + ).toBeInTheDocument(); }); it('should render correct fields based on saved schema', async () => { diff --git a/packages/editor-ui/src/plugins/i18n/locales/en.json b/packages/editor-ui/src/plugins/i18n/locales/en.json index 49b331e4c1787..2bdb52459aa82 100644 --- a/packages/editor-ui/src/plugins/i18n/locales/en.json +++ b/packages/editor-ui/src/plugins/i18n/locales/en.json @@ -1491,8 +1491,8 @@ "resourceMapper.fetchingFields.errorMessage": "Can't get {fieldWord}.", "resourceMapper.fetchingFields.noFieldsFound": "No {fieldWord} found in {serviceName}.", "resourceMapper.columnsToMatchOn.label": "{fieldWord} to Match On", - "resourceMapper.columnsToMatchOn.multi.description": "The {fieldWord} that identify the row(s) to modify", - "resourceMapper.columnsToMatchOn.single.description": "The {fieldWord} that identifies the row(s) to modify", + "resourceMapper.columnsToMatchOn.multi.description": "The {fieldWord} to use when matching rows in {nodeDisplayName} to the input items of this node. Usually an ID.", + "resourceMapper.columnsToMatchOn.single.description": "The {fieldWord} to use when matching rows in {nodeDisplayName} to the input items of this node. Usually an ID.", "resourceMapper.columnsToMatchOn.tooltip": "The {fieldWord} to compare when finding the rows to update", "resourceMapper.columnsToMatchOn.noFieldsFound": "No {fieldWord} that can be used for matching found in {serviceName}.", "resourceMapper.valuesToSend.label": "Values to Send", diff --git a/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/appendOrUpdate.operation.ts b/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/appendOrUpdate.operation.ts index 140e7bf3a18d9..469181ecb2cf0 100644 --- a/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/appendOrUpdate.operation.ts +++ b/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/appendOrUpdate.operation.ts @@ -338,8 +338,18 @@ export async function execute( } else { const valueToMatchOn = nodeVersion < 4 - ? (this.getNodeParameter('valueToMatchOn', i) as string) - : (this.getNodeParameter(`columns.value[${columnsToMatchOn[0]}]`, i) as string); + ? (this.getNodeParameter('valueToMatchOn', i, '') as string) + : (this.getNodeParameter(`columns.value[${columnsToMatchOn[0]}]`, i, '') as string); + + if (valueToMatchOn === '') { + throw new NodeOperationError( + this.getNode(), + "The 'Column to Match On' parameter is required", + { + itemIndex: i, + }, + ); + } if (nodeVersion < 4) { const valuesToSend = this.getNodeParameter('fieldsUi.values', i, []) as IDataObject[]; diff --git a/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/update.operation.ts b/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/update.operation.ts index 3d69573c43d1a..ba72e993d9941 100644 --- a/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/update.operation.ts +++ b/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/update.operation.ts @@ -318,8 +318,18 @@ export async function execute( } else { const valueToMatchOn = nodeVersion < 4 - ? (this.getNodeParameter('valueToMatchOn', i) as string) - : (this.getNodeParameter(`columns.value[${columnsToMatchOn[0]}]`, i) as string); + ? (this.getNodeParameter('valueToMatchOn', i, '') as string) + : (this.getNodeParameter(`columns.value[${columnsToMatchOn[0]}]`, i, '') as string); + + if (valueToMatchOn === '') { + throw new NodeOperationError( + this.getNode(), + "The 'Column to Match On' parameter is required", + { + itemIndex: i, + }, + ); + } if (nodeVersion < 4) { const valuesToSend = this.getNodeParameter('fieldsUi.values', i, []) as IDataObject[]; diff --git a/packages/nodes-base/nodes/Postgres/v2/actions/database/update.operation.ts b/packages/nodes-base/nodes/Postgres/v2/actions/database/update.operation.ts index 6c5db8477062c..c6c866cf5a823 100644 --- a/packages/nodes-base/nodes/Postgres/v2/actions/database/update.operation.ts +++ b/packages/nodes-base/nodes/Postgres/v2/actions/database/update.operation.ts @@ -82,7 +82,7 @@ const properties: INodeProperties[] = [ loadOptionsDependsOn: ['schema.value', 'table.value'], }, default: '', - hint: 'The column that identifies the row(s) to modify', + hint: 'The column to use when matching rows in Postgres to the input items of this node. Usually an ID.', displayOptions: { show: { '@version': [2, 2.1],