From 6a2d970ea84c6f1afa908c1d44c5178d01f9b3a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D0=B5=D0=B1=D0=B5=D0=B4=D0=B5=D0=B2=20=D0=98=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD?= <11215636+X-pech@users.noreply.github.com> Date: Sun, 19 Dec 2021 14:41:19 +0300 Subject: [PATCH] :bug: Fix due_datetime formatting on Todoist (#2491) * Fixed due_datetime formatting Signed-off-by: Ivan Lebedev * Option to specify due_string language Signed-off-by: Ivan Lebedev * Removed debug imports Signed-off-by: Ivan Lebedev --- .../nodes/Todoist/GenericFunctions.ts | 6 ++++ .../nodes-base/nodes/Todoist/Todoist.node.ts | 29 +++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/packages/nodes-base/nodes/Todoist/GenericFunctions.ts b/packages/nodes-base/nodes/Todoist/GenericFunctions.ts index bd09118da..a8658a42d 100644 --- a/packages/nodes-base/nodes/Todoist/GenericFunctions.ts +++ b/packages/nodes-base/nodes/Todoist/GenericFunctions.ts @@ -12,6 +12,12 @@ import { IDataObject, NodeApiError, } from 'n8n-workflow'; +export function FormatDueDatetime(ISOString: string): string { + // Assuming that the problem with incorrect date format was caused by milliseconds + // Replacing the last 5 characters of ISO-formatted string with just Z char + return ISOString.replace(new RegExp('.000Z$'), 'Z'); +} + export async function todoistApiRequest( this: | IHookFunctions diff --git a/packages/nodes-base/nodes/Todoist/Todoist.node.ts b/packages/nodes-base/nodes/Todoist/Todoist.node.ts index a4ebc6fe2..edc5c4fcc 100644 --- a/packages/nodes-base/nodes/Todoist/Todoist.node.ts +++ b/packages/nodes-base/nodes/Todoist/Todoist.node.ts @@ -13,6 +13,7 @@ import { import { todoistApiRequest, + FormatDueDatetime, } from './GenericFunctions'; interface IBodyCreateTask { @@ -276,6 +277,13 @@ export class Todoist implements INodeType { default: '', description: 'Human defined task due date (ex.: “next Monday”, “Tomorrow”). Value is set using local (not UTC) time.', }, + { + displayName: 'Due String Locale', + name: 'dueLang', + type: 'string', + default: '', + description: '2-letter code specifying language in case due_string is not written in English.', + }, { displayName: 'Priority', name: 'priority', @@ -357,7 +365,7 @@ export class Todoist implements INodeType { ], operation: [ 'getAll', - ], + ], }, }, options: [ @@ -449,6 +457,13 @@ export class Todoist implements INodeType { default: '', description: 'Human defined task due date (ex.: “next Monday”, “Tomorrow”). Value is set using local (not UTC) time.', }, + { + displayName: 'Due String Locale', + name: 'dueLang', + type: 'string', + default: '', + description: '2-letter code specifying language in case due_string is not written in English.', + }, { displayName: 'Labels', name: 'labels', @@ -573,13 +588,17 @@ export class Todoist implements INodeType { } if (options.dueDateTime) { - body.due_datetime = options.dueDateTime as string; + body.due_datetime = FormatDueDatetime(options.dueDateTime as string); } if (options.dueString) { body.due_string = options.dueString as string; } + if (options.dueLang) { + body.due_lang = options.dueLang as string; + } + if (labels !== undefined && labels.length !== 0) { body.label_ids = labels; } @@ -670,13 +689,17 @@ export class Todoist implements INodeType { } if (updateFields.dueDateTime) { - body.due_datetime = updateFields.dueDateTime as string; + body.due_datetime = FormatDueDatetime(updateFields.dueDateTime as string); } if (updateFields.dueString) { body.due_string = updateFields.dueString as string; } + if (updateFields.dueLang) { + body.due_lang = updateFields.dueLang as string; + } + if (updateFields.labels !== undefined && Array.isArray(updateFields.labels) && updateFields.labels.length !== 0) {