From 435272b568826edf899dbaba9d10077fbe134ea6 Mon Sep 17 00:00:00 2001 From: Jon Date: Wed, 8 May 2024 10:24:08 +0100 Subject: [PATCH] fix(Linear Node): Fix issue with data not always being returned (#9273) Co-authored-by: Michael Kret --- .../nodes/Linear/GenericFunctions.ts | 20 ++++++++++++++----- .../nodes/Linear/IssueDescription.ts | 1 - .../nodes-base/nodes/Linear/Linear.node.ts | 4 +--- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/packages/nodes-base/nodes/Linear/GenericFunctions.ts b/packages/nodes-base/nodes/Linear/GenericFunctions.ts index 886685458..4d008f2ac 100644 --- a/packages/nodes-base/nodes/Linear/GenericFunctions.ts +++ b/packages/nodes-base/nodes/Linear/GenericFunctions.ts @@ -52,20 +52,30 @@ export function capitalizeFirstLetter(data: string) { export async function linearApiRequestAllItems( this: IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions, propertyName: string, - body: any = {}, + limit?: number, ): Promise { const returnData: IDataObject[] = []; let responseData; - body.variables.first = 50; + body.variables.first = limit && limit < 50 ? limit : 50; body.variables.after = null; + const propertyPath = propertyName.split('.'); + const nodesPath = [...propertyPath, 'nodes']; + const endCursorPath = [...propertyPath, 'pageInfo', 'endCursor']; + const hasNextPagePath = [...propertyPath, 'pageInfo', 'hasNextPage']; + do { responseData = await linearApiRequest.call(this, body); - returnData.push.apply(returnData, get(responseData, [propertyName, 'nodes']) as IDataObject[]); - body.variables.after = get(responseData, [propertyName, 'pageInfo', 'endCursor']); - } while (get(responseData, [propertyName, 'pageInfo', 'hasNextPage'])); + const nodes = get(responseData, nodesPath) as IDataObject[]; + returnData.push(...nodes); + body.variables.after = get(responseData, endCursorPath); + if (limit && returnData.length >= limit) { + return returnData; + } + } while (get(responseData, hasNextPagePath)); + return returnData; } diff --git a/packages/nodes-base/nodes/Linear/IssueDescription.ts b/packages/nodes-base/nodes/Linear/IssueDescription.ts index e54f86e58..207bfd602 100644 --- a/packages/nodes-base/nodes/Linear/IssueDescription.ts +++ b/packages/nodes-base/nodes/Linear/IssueDescription.ts @@ -192,7 +192,6 @@ export const issueFields: INodeProperties[] = [ default: 50, typeOptions: { minValue: 1, - maxValue: 300, }, displayOptions: { show: { diff --git a/packages/nodes-base/nodes/Linear/Linear.node.ts b/packages/nodes-base/nodes/Linear/Linear.node.ts index 4cd703557..6bbc784fe 100644 --- a/packages/nodes-base/nodes/Linear/Linear.node.ts +++ b/packages/nodes-base/nodes/Linear/Linear.node.ts @@ -272,9 +272,7 @@ export class Linear implements INodeType { responseData = await linearApiRequestAllItems.call(this, 'data.issues', body); } else { const limit = this.getNodeParameter('limit', 0); - body.variables.first = limit; - responseData = await linearApiRequest.call(this, body); - responseData = responseData.data.issues.nodes; + responseData = await linearApiRequestAllItems.call(this, 'data.issues', body, limit); } } if (operation === 'update') {