diff --git a/packages/nodes-base/nodes/ClickUp/ClickUp.node.ts b/packages/nodes-base/nodes/ClickUp/ClickUp.node.ts index 1a4eb5f7c2..887f9033ae 100644 --- a/packages/nodes-base/nodes/ClickUp/ClickUp.node.ts +++ b/packages/nodes-base/nodes/ClickUp/ClickUp.node.ts @@ -53,14 +53,14 @@ export class ClickUp implements INodeType { name: 'resource', type: 'options', options: [ - { - name: 'Task', - value: 'task', - }, { name: 'List', value: 'list', }, + { + name: 'Task', + value: 'task', + }, ], default: 'task', description: 'Resource to consume.', @@ -219,11 +219,17 @@ export class ClickUp implements INodeType { if (operation === 'create') { const listId = this.getNodeParameter('list', i) as string; const name = this.getNodeParameter('name', i) as string; - const jsonActive = this.getNodeParameter('jsonParameters', i) as boolean; const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject; const body: ITask = { name, }; + if (additionalFields.customFieldsJson) { + const customFields = validateJSON(additionalFields.customFieldsJson as string); + if (customFields === undefined) { + throw new Error('Custom Fields: Invalid JSON'); + } + body.custom_fields = customFields; + } if (additionalFields.content) { body.content = additionalFields.content as string; } @@ -264,13 +270,6 @@ export class ClickUp implements INodeType { delete body.content; body.markdown_content = additionalFields.content as string; } - if (jsonActive) { - const customFields = validateJSON(this.getNodeParameter('customFieldsJson', i) as string); - if (customFields === undefined) { - throw new Error('Custom Fields: Invalid JSON'); - } - body.custom_fields = customFields; - } responseData = await clickupApiRequest.call(this, 'POST', `/list/${listId}/task`, body); } if (operation === 'update') { @@ -373,11 +372,20 @@ export class ClickUp implements INodeType { const taskId = this.getNodeParameter('task', i) as string; const fieldId = this.getNodeParameter('field', i) as string; const value = this.getNodeParameter('value', i) as string; + const jsonParse = this.getNodeParameter('jsonParse', i) as boolean; + const body: IDataObject = {}; body.value = value; - //@ts-ignore - if (!isNaN(value)) { - body.value = parseInt(value, 10); + if (jsonParse === true) { + body.value = validateJSON(body.value); + if (body.value === undefined) { + throw new Error('Value is invalid JSON!'); + } + } else { + //@ts-ignore + if (!isNaN(body.value)) { + body.value = parseInt(body.value, 10); + } } responseData = await clickupApiRequest.call(this, 'POST', `/task/${taskId}/field/${fieldId}`, body); } diff --git a/packages/nodes-base/nodes/ClickUp/TaskDescription.ts b/packages/nodes-base/nodes/ClickUp/TaskDescription.ts index 56c60d6624..77a12ed07a 100644 --- a/packages/nodes-base/nodes/ClickUp/TaskDescription.ts +++ b/packages/nodes-base/nodes/ClickUp/TaskDescription.ts @@ -210,22 +210,6 @@ export const taskFields = [ required: true, description: 'The first name on the task', }, - { - displayName: 'JSON Parameters', - name: 'jsonParameters', - type: 'boolean', - displayOptions: { - show: { - resource: [ - 'task', - ], - operation: [ - 'create', - ] - }, - }, - default: false, - }, { displayName: 'Additional Fields', name: 'additionalFields', @@ -256,6 +240,16 @@ export const taskFields = [ default: [], }, + { + displayName: 'Custom Fields JSON', + name: 'customFieldsJson', + type: 'json', + typeOptions: { + alwaysOpenEditWindow: true, + }, + default: '', + description: 'Custom fields to set as JSON in the format:
[{"id": "", "value": ""}]', + }, { displayName: 'Content', name: 'content', @@ -346,28 +340,6 @@ export const taskFields = [ }, ], }, - { - displayName: 'Custom Fields', - name: 'customFieldsJson', - type: 'json', - typeOptions: { - alwaysOpenEditWindow: true, - }, - displayOptions: { - show: { - resource: [ - 'task', - ], - operation: [ - 'create', - ], - jsonParameters: [ - true, - ], - }, - }, - default: '', - }, /* -------------------------------------------------------------------------- */ /* task:update */ /* -------------------------------------------------------------------------- */ @@ -764,7 +736,7 @@ export const taskFields = [ name: 'includeClosed', type: 'boolean', default: false, - description: 'the api does not include closed tasks. Set this to true and dont send a status filter to include closed tasks', + description: 'The response does by default not include closed tasks. Set this to true and dont send a status filter to include closed tasks.', }, { displayName: 'Order By', @@ -864,7 +836,7 @@ export const taskFields = [ ], }, }, - description: 'Task ID', + description: 'The ID of the task to add custom field to.', }, { displayName: 'Field ID', @@ -882,7 +854,26 @@ export const taskFields = [ ], }, }, - description: 'Task ID', + description: 'The ID of the field to add custom field to.', + }, + { + displayName: 'Value is JSON', + name: 'jsonParse', + type: 'boolean', + displayOptions: { + show: { + resource: [ + 'task', + ], + operation: [ + 'setCustomField', + ] + }, + }, + default: false, + description: `The value is JSON and will be parsed as such. Is needed
+ if for example needed for labels which expects the value
+ to be an array.`, }, { displayName: 'Value', @@ -900,6 +891,6 @@ export const taskFields = [ ], }, }, - description: 'Value', + description: 'The value to set on custom field.', }, ] as INodeProperties[];