From 5548e4e794137e4364a05522c1494f1483fe1bc6 Mon Sep 17 00:00:00 2001 From: Jan Oberhauser Date: Fri, 21 Feb 2020 11:41:08 +0100 Subject: [PATCH] :zap: Improved Clickify-Node --- .../nodes/Clockify/ClockifyTrigger.node.ts | 40 ++++++++++-------- .../nodes-base/nodes/Clockify/CommonDtos.ts | 8 ++-- .../nodes/Clockify/GenericFunctions.ts | 6 +-- .../nodes-base/nodes/Clockify/UserDtos.ts | 2 +- .../nodes/Clockify/WorkpaceInterfaces.ts | 35 ++++++++------- .../clockify-mark-blue.png => clockify.png} | Bin packages/nodes-base/package.json | 5 +-- 7 files changed, 49 insertions(+), 47 deletions(-) rename packages/nodes-base/nodes/Clockify/{images/clockify-mark-blue.png => clockify.png} (100%) diff --git a/packages/nodes-base/nodes/Clockify/ClockifyTrigger.node.ts b/packages/nodes-base/nodes/Clockify/ClockifyTrigger.node.ts index 7b14182ffe7..e2a64f33657 100644 --- a/packages/nodes-base/nodes/Clockify/ClockifyTrigger.node.ts +++ b/packages/nodes-base/nodes/Clockify/ClockifyTrigger.node.ts @@ -1,3 +1,5 @@ +import * as moment from 'moment-timezone'; + import {IPollFunctions} from 'n8n-core'; import { IDataObject, @@ -12,22 +14,21 @@ import { clockifyApiRequest, } from './GenericFunctions'; -import {IWorkspaceDto} from "./WorkpaceInterfaces"; -import {EntryTypeEnum} from "./EntryTypeEnum"; -import {ICurrentUserDto} from "./UserDtos"; -import * as moment from "moment"; +import { EntryTypeEnum } from './EntryTypeEnum'; +import { ICurrentUserDto } from './UserDtos'; +import { IWorkspaceDto } from './WorkpaceInterfaces'; export class ClockifyTrigger implements INodeType { description: INodeTypeDescription = { - displayName: 'Clockify Event', - icon: 'file:images/clockify-mark-blue.png', + displayName: 'Clockify Trigger', + icon: 'file:clockify.png', name: 'clockifyTrigger', group: ['trigger'], version: 1, description: 'Watches Clockify For Events', defaults: { - name: 'Clockify Event', + name: 'Clockify Trigger', color: '#00FF00', }, inputs: [], @@ -38,6 +39,7 @@ export class ClockifyTrigger implements INodeType { required: true, } ], + polling: true, properties: [ { displayName: 'Workspace', @@ -60,7 +62,7 @@ export class ClockifyTrigger implements INodeType { } ], required: true, - default: '', + default: EntryTypeEnum.NEW_TIME_ENTRY, }, ] }; @@ -89,7 +91,12 @@ export class ClockifyTrigger implements INodeType { const triggerField = this.getNodeParameter('watchField') as EntryTypeEnum; const workspaceId = this.getNodeParameter('workspaceId'); - const userInfo : ICurrentUserDto = await clockifyApiRequest.call(this,'GET', 'user'); + if (!webhookData.userId) { + // Cache the user-id that we do not have to request it every time + const userInfo: ICurrentUserDto = await clockifyApiRequest.call(this, 'GET', 'user'); + webhookData.userId = userInfo.id; + } + const qs : IDataObject = {}; let resource: string; let result = null; @@ -97,21 +104,18 @@ export class ClockifyTrigger implements INodeType { switch (triggerField) { case EntryTypeEnum.NEW_TIME_ENTRY : default: - resource = `workspaces/${workspaceId}/user/${userInfo.id}/time-entries`; + const workflowTimezone = this.getTimezone(); + resource = `workspaces/${workspaceId}/user/${webhookData.userId}/time-entries`; qs.start = webhookData.lastTimeChecked; - qs.end = moment().toISOString(); + qs.end = moment().tz(workflowTimezone).format('YYYY-MM-DDTHH:mm:SS') + 'Z'; qs.hydrated = true; qs['in-progress'] = false; break; } - try { - result = await clockifyApiRequest.call(this, 'GET', resource, {}, qs ); - webhookData.lastTimeChecked = qs.end_date; - } - catch( e ) { - throw new Error(`Clockify Exception: ${e}`); - } + result = await clockifyApiRequest.call(this, 'GET', resource, {}, qs ); + webhookData.lastTimeChecked = qs.end; + if (Array.isArray(result) && result.length !== 0) { result = [this.helpers.returnJsonArray(result)]; } diff --git a/packages/nodes-base/nodes/Clockify/CommonDtos.ts b/packages/nodes-base/nodes/Clockify/CommonDtos.ts index b5449c5c5c9..2876fd4ffa5 100644 --- a/packages/nodes-base/nodes/Clockify/CommonDtos.ts +++ b/packages/nodes-base/nodes/Clockify/CommonDtos.ts @@ -4,10 +4,10 @@ export interface IHourlyRateDto { } enum MembershipStatusEnum { - PENDING = "PENDING", - ACTIVE = "ACTIVE", - DECLINED = "DECLINED", - INACTIVE = "INACTIVE" + PENDING = 'PENDING', + ACTIVE = 'ACTIVE', + DECLINED = 'DECLINED', + INACTIVE = 'INACTIVE' } export interface IMembershipDto { diff --git a/packages/nodes-base/nodes/Clockify/GenericFunctions.ts b/packages/nodes-base/nodes/Clockify/GenericFunctions.ts index 62a59435003..730fad23a32 100644 --- a/packages/nodes-base/nodes/Clockify/GenericFunctions.ts +++ b/packages/nodes-base/nodes/Clockify/GenericFunctions.ts @@ -2,16 +2,16 @@ import { OptionsWithUri } from 'request'; import { ILoadOptionsFunctions, IPollFunctions -} from "n8n-core"; +} from 'n8n-core'; -import {IDataObject} from "n8n-workflow"; +import { IDataObject } from 'n8n-workflow'; export async function clockifyApiRequest(this: ILoadOptionsFunctions | IPollFunctions, method: string, resource: string, body: any = {}, qs: IDataObject = {}, uri?: string, option: IDataObject = {}): Promise { // tslint:disable-line:no-any const credentials = this.getCredentials('clockifyApi'); if (credentials === undefined) { throw new Error('No credentials got returned!'); } - const BASE_URL = `https://api.clockify.me/api/v1`; + const BASE_URL = 'https://api.clockify.me/api/v1'; const options: OptionsWithUri = { headers: { diff --git a/packages/nodes-base/nodes/Clockify/UserDtos.ts b/packages/nodes-base/nodes/Clockify/UserDtos.ts index cf7ee158136..c6f0efdf7a0 100644 --- a/packages/nodes-base/nodes/Clockify/UserDtos.ts +++ b/packages/nodes-base/nodes/Clockify/UserDtos.ts @@ -1,4 +1,4 @@ -import {IMembershipDto} from "./CommonDtos"; +import { IMembershipDto } from './CommonDtos'; enum UserStatusEnum { ACTIVE, PENDING_EMAIL_VERIFICATION, DELETED diff --git a/packages/nodes-base/nodes/Clockify/WorkpaceInterfaces.ts b/packages/nodes-base/nodes/Clockify/WorkpaceInterfaces.ts index fdf0c005ecd..a06540c3649 100644 --- a/packages/nodes-base/nodes/Clockify/WorkpaceInterfaces.ts +++ b/packages/nodes-base/nodes/Clockify/WorkpaceInterfaces.ts @@ -1,31 +1,31 @@ -import {IHourlyRateDto, IMembershipDto} from "./CommonDtos"; +import { IHourlyRateDto, IMembershipDto } from './CommonDtos'; enum AdminOnlyPagesEnum { - PROJECT ="PROJECT", - TEAM = "TEAM", - REPORTS = "REPORTS" + PROJECT ='PROJECT', + TEAM = 'TEAM', + REPORTS = 'REPORTS', } enum DaysOfWeekEnum { - MONDAY = "MONDAY", - TUESDAY = "TUESDAY", - WEDNESDAY = "WEDNESDAY", - THURSDAY = "THURSDAY", - FRIDAY = "FRIDAY", - SATURDAY = "SATURDAY", - SUNDAY = "SUNDAY" + MONDAY = 'MONDAY', + TUESDAY = 'TUESDAY', + WEDNESDAY = 'WEDNESDAY', + THURSDAY = 'THURSDAY', + FRIDAY = 'FRIDAY', + SATURDAY = 'SATURDAY', + SUNDAY = 'SUNDAY', } enum DatePeriodEnum { - DAYS="DAYS", - WEEKS = "WEEKS", - MONTHS = "MONTHS" + DAYS = 'DAYS', + WEEKS = 'WEEKS', + MONTHS = 'MONTHS', } enum AutomaticLockTypeEnum { - WEEKLY = "WEEKLY", - MONTHLY = "MONTHLY", - OLDER_THAN = "OLDER_THAN" + WEEKLY = 'WEEKLY', + MONTHLY = 'MONTHLY', + OLDER_THAN = 'OLDER_THAN', } interface IAutomaticLockDto { @@ -74,4 +74,3 @@ export interface IWorkspaceDto { name: string; workspaceSettings: IWorkspaceSettingsDto; } - diff --git a/packages/nodes-base/nodes/Clockify/images/clockify-mark-blue.png b/packages/nodes-base/nodes/Clockify/clockify.png similarity index 100% rename from packages/nodes-base/nodes/Clockify/images/clockify-mark-blue.png rename to packages/nodes-base/nodes/Clockify/clockify.png diff --git a/packages/nodes-base/package.json b/packages/nodes-base/package.json index f6fc8bae501..59b28c1d146 100644 --- a/packages/nodes-base/package.json +++ b/packages/nodes-base/package.json @@ -37,7 +37,7 @@ "dist/credentials/ChargebeeApi.credentials.js", "dist/credentials/ClearbitApi.credentials.js", "dist/credentials/ClickUpApi.credentials.js", - "dist/credentials/ClockifyApi.credentials.js", + "dist/credentials/ClockifyApi.credentials.js", "dist/credentials/CodaApi.credentials.js", "dist/credentials/CopperApi.credentials.js", "dist/credentials/DisqusApi.credentials.js", @@ -119,7 +119,7 @@ "dist/nodes/Clearbit/Clearbit.node.js", "dist/nodes/ClickUp/ClickUp.node.js", "dist/nodes/ClickUp/ClickUpTrigger.node.js", - "dist/nodes/Clockify/ClockifyTrigger.node.js", + "dist/nodes/Clockify/ClockifyTrigger.node.js", "dist/nodes/Coda/Coda.node.js", "dist/nodes/Copper/CopperTrigger.node.js", "dist/nodes/Cron.node.js", @@ -295,4 +295,3 @@ ] } } -