From c574a0d20dbd3794f6ba08dd635bbd518be5ee40 Mon Sep 17 00:00:00 2001 From: Ricardo Espinoza Date: Fri, 19 Nov 2021 09:46:48 -0500 Subject: [PATCH] :zap: Add components parameter to Jira (#2428) --- .../nodes-base/nodes/Jira/IssueDescription.ts | 12 +++++++++ .../nodes-base/nodes/Jira/IssueInterface.ts | 1 + packages/nodes-base/nodes/Jira/Jira.node.ts | 27 +++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/packages/nodes-base/nodes/Jira/IssueDescription.ts b/packages/nodes-base/nodes/Jira/IssueDescription.ts index d8acd74384..9965921a8a 100644 --- a/packages/nodes-base/nodes/Jira/IssueDescription.ts +++ b/packages/nodes-base/nodes/Jira/IssueDescription.ts @@ -164,6 +164,18 @@ export const issueFields = [ default: '', description: 'Description', }, + { + displayName: 'Components', + name: 'componentIds', + type: 'multiOptions', + typeOptions: { + loadOptionsMethod: 'getProjectComponents', + loadOptionsDependsOn: [ + 'project', + ], + }, + default: [], + }, { displayName: 'Custom Fields', name: 'customFieldsUi', diff --git a/packages/nodes-base/nodes/Jira/IssueInterface.ts b/packages/nodes-base/nodes/Jira/IssueInterface.ts index bef90057a9..1e7b21b0ba 100644 --- a/packages/nodes-base/nodes/Jira/IssueInterface.ts +++ b/packages/nodes-base/nodes/Jira/IssueInterface.ts @@ -12,6 +12,7 @@ export interface IFields { project?: IDataObject; summary?: string; reporter?: IDataObject; + components?: IDataObject[]; } export interface IIssue { diff --git a/packages/nodes-base/nodes/Jira/Jira.node.ts b/packages/nodes-base/nodes/Jira/Jira.node.ts index 579840d3a9..e4520453b8 100644 --- a/packages/nodes-base/nodes/Jira/Jira.node.ts +++ b/packages/nodes-base/nodes/Jira/Jira.node.ts @@ -427,6 +427,30 @@ export class Jira implements INodeType { } return returnData; }, + + // Get all the components to display them to user so that he can + // select them easily + async getProjectComponents(this: ILoadOptionsFunctions): Promise { + const returnData: INodePropertyOptions[] = []; + + const project = this.getCurrentNodeParameter('project'); + const { values: components } = await jiraSoftwareCloudApiRequest.call(this, `/api/2/project/${project}/component`, 'GET'); + + for (const component of components) { + returnData.push({ + name: component.name, + value: component.id, + }); + } + + returnData.sort((a, b) => { + if (a.name < b.name) { return -1; } + if (a.name > b.name) { return 1; } + return 0; + }); + + return returnData; + }, }, }; @@ -492,6 +516,9 @@ export class Jira implements INodeType { if (additionalFields.updateHistory) { qs.updateHistory = additionalFields.updateHistory as boolean; } + if (additionalFields.componentIds) { + fields.components = (additionalFields.componentIds as string[]).map(id => ({ id })); + } if (additionalFields.customFieldsUi) { const customFields = (additionalFields.customFieldsUi as IDataObject).customFieldsValues as IDataObject[]; if (customFields) {