diff --git a/packages/nodes-base/nodes/Google/GoogleSheet.ts b/packages/nodes-base/nodes/Google/GoogleSheet.ts index 678ffdbbd2..58392be54f 100644 --- a/packages/nodes-base/nodes/Google/GoogleSheet.ts +++ b/packages/nodes-base/nodes/Google/GoogleSheet.ts @@ -316,10 +316,11 @@ export class GoogleSheet { * @param {number} keyRowIndex Index of the row which contains the keys * @param {number} dataStartRowIndex Index of the first row which contains data * @param {ILookupValues[]} lookupValues The lookup values which decide what data to return + * @param {boolean} [returnAllMatches] Returns all the found matches instead of only the first one * @returns {Promise} * @memberof GoogleSheet */ - async lookupValues(inputData: string[][], keyRowIndex: number, dataStartRowIndex: number, lookupValues: ILookupValues[]): Promise { + async lookupValues(inputData: string[][], keyRowIndex: number, dataStartRowIndex: number, lookupValues: ILookupValues[], returnAllMatches?: boolean): Promise { const keys: string[] = []; if (keyRowIndex < 0 || dataStartRowIndex < keyRowIndex || keyRowIndex >= inputData.length) { @@ -351,13 +352,18 @@ export class GoogleSheet { for (rowIndex = dataStartRowIndex; rowIndex < inputData.length; rowIndex++) { if (inputData[rowIndex][returnColumnIndex].toString() === lookupValue.lookupValue.toString()) { returnData.push(inputData[rowIndex]); - continue lookupLoop; + + if (returnAllMatches !== true) { + continue lookupLoop; + } } } // If value could not be found add an empty one that the order of // the returned items stays the same - returnData.push([]); + if (returnAllMatches !== true) { + returnData.push([]); + } } return this.structureData(returnData, 1, keys, true); diff --git a/packages/nodes-base/nodes/Google/GoogleSheets.node.ts b/packages/nodes-base/nodes/Google/GoogleSheets.node.ts index c6f0ca0d55..da7d070214 100644 --- a/packages/nodes-base/nodes/Google/GoogleSheets.node.ts +++ b/packages/nodes-base/nodes/Google/GoogleSheets.node.ts @@ -267,6 +267,20 @@ export class GoogleSheets implements INodeType { placeholder: 'Add Option', default: {}, options: [ + { + displayName: 'Return All Matches', + name: 'returnAllMatches', + type: 'boolean', + default: false, + displayOptions: { + show: { + '/operation': [ + 'lookup', + ], + }, + }, + description: 'By default only the first result gets returned. If options gets set all found matches get returned.', + }, { displayName: 'Value Input Mode', name: 'valueInputMode', @@ -436,7 +450,7 @@ export class GoogleSheets implements INodeType { }); } - const returnData = await sheet.lookupValues(sheetData, keyRow, dataStartRow, lookupValues); + const returnData = await sheet.lookupValues(sheetData, keyRow, dataStartRow, lookupValues, options.returnAllMatches as boolean | undefined); return [this.helpers.returnJsonArray(returnData)]; } else if (operation === 'read') {