Skip to content

Commit

Permalink
Merge pull request activepieces#5099 from alan-eu/olivier-sambourg/fe…
Browse files Browse the repository at this point in the history
…at-todoist-add-support-for-natural-language-due-dates

feat(todoist): add support for natural language due dates
  • Loading branch information
kishanprmr authored Jul 12, 2024
2 parents fd373c2 + 36eac0c commit 5d1c636
Show file tree
Hide file tree
Showing 5 changed files with 292 additions and 252 deletions.
4 changes: 2 additions & 2 deletions packages/pieces/community/todoist/package.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"name": "@activepieces/piece-todoist",
"version": "0.3.8"
}
"version": "0.3.9"
}
Original file line number Diff line number Diff line change
@@ -1,65 +1,77 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { assertNotNullOrUndefined } from '@activepieces/shared';
import { todoistRestClient } from '../common/client/rest-client';
import { todoistProjectIdDropdown, todoistSectionIdDropdown } from '../common/props';
import {
todoistProjectIdDropdown,
todoistSectionIdDropdown,
} from '../common/props';
import { TodoistCreateTaskRequest } from '../common/models';
import { todoistAuth } from '../..';

export const todoistCreateTaskAction = createAction({
auth: todoistAuth,
name: 'create_task',
displayName: 'Create Task',
description: 'Create task',
props: {
project_id: todoistProjectIdDropdown(
"Task project ID. If not set, task is put to user's Inbox.",
),
content: Property.LongText({
displayName: 'content',
description: "The task's content. It may contain some markdown-formatted text and hyperlinks",
required: true,
}),
description: Property.LongText({
displayName: 'Description',
description:
'A description for the task. This value may contain some markdown-formatted text and hyperlinks.',
required: false,
}),
labels: Property.Array({
displayName: 'Labels',
required: false,
description:
"The task's labels (a list of names that may represent either personal or shared labels)",
}),
priority: Property.Number({
displayName: 'Priority',
description: 'Task priority from 1 (normal) to 4 (urgent)',
required: false,
}),
due_date: Property.ShortText({
displayName: 'Due date',
description: "Specific date in YYYY-MM-DD format relative to user's timezone",
required: false,
}),
section_id: todoistSectionIdDropdown,
},
auth: todoistAuth,
name: 'create_task',
displayName: 'Create Task',
description: 'Create task',
props: {
project_id: todoistProjectIdDropdown(
"Task project ID. If not set, task is put to user's Inbox."
),
content: Property.LongText({
displayName: 'content',
description:
"The task's content. It may contain some markdown-formatted text and hyperlinks",
required: true,
}),
description: Property.LongText({
displayName: 'Description',
description:
'A description for the task. This value may contain some markdown-formatted text and hyperlinks.',
required: false,
}),
labels: Property.Array({
displayName: 'Labels',
required: false,
description:
"The task's labels (a list of names that may represent either personal or shared labels)",
}),
priority: Property.Number({
displayName: 'Priority',
description: 'Task priority from 1 (normal) to 4 (urgent)',
required: false,
}),
due_date: Property.ShortText({
displayName: 'Due date',
description:
"Can be either a specific date in YYYY-MM-DD format relative to user's timezone, a specific date and time in RFC3339 format, or a human defined date (e.g. 'next Monday') using local time",
required: false,
}),
section_id: todoistSectionIdDropdown,
},

async run({ auth, propsValue }) {
const token = auth.access_token;
const { project_id, content, description, labels, priority, due_date, section_id } =
propsValue as TodoistCreateTaskRequest;
async run({ auth, propsValue }) {
const token = auth.access_token;
const {
project_id,
content,
description,
labels,
priority,
due_date,
section_id,
} = propsValue as TodoistCreateTaskRequest;

assertNotNullOrUndefined(token, 'token');
assertNotNullOrUndefined(content, 'content');
return await todoistRestClient.tasks.create({
token,
project_id,
content,
description,
labels,
priority,
due_date,
section_id,
});
},
assertNotNullOrUndefined(token, 'token');
assertNotNullOrUndefined(content, 'content');
return await todoistRestClient.tasks.create({
token,
project_id,
content,
description,
labels,
priority,
due_date,
section_id,
});
},
});
Original file line number Diff line number Diff line change
Expand Up @@ -4,58 +4,60 @@ import { todoistRestClient } from '../common/client/rest-client';
import { todoistAuth } from '../..';

export const todoistUpdateTaskAction = createAction({
auth: todoistAuth,
name: 'update_task',
displayName: 'Update Task',
description: 'Updates an existing task.',
props: {
task_id: Property.ShortText({
displayName: 'Task ID',
required: true,
}),
content: Property.LongText({
displayName: 'content',
description: "The task's content. It may contain some markdown-formatted text and hyperlinks",
required: false,
}),
description: Property.LongText({
displayName: 'Description',
description:
'A description for the task. This value may contain some markdown-formatted text and hyperlinks.',
required: false,
}),
labels: Property.Array({
displayName: 'Labels',
required: false,
description:
"The task's labels (a list of names that may represent either personal or shared labels)",
}),
priority: Property.Number({
displayName: 'Priority',
description: 'Task priority from 1 (normal) to 4 (urgent)',
required: false,
}),
due_date: Property.ShortText({
displayName: 'Due date',
description: "Specific date in YYYY-MM-DD format relative to user's timezone",
required: false,
}),
},
auth: todoistAuth,
name: 'update_task',
displayName: 'Update Task',
description: 'Updates an existing task.',
props: {
task_id: Property.ShortText({
displayName: 'Task ID',
required: true,
}),
content: Property.LongText({
displayName: 'content',
description:
"The task's content. It may contain some markdown-formatted text and hyperlinks",
required: false,
}),
description: Property.LongText({
displayName: 'Description',
description:
'A description for the task. This value may contain some markdown-formatted text and hyperlinks.',
required: false,
}),
labels: Property.Array({
displayName: 'Labels',
required: false,
description:
"The task's labels (a list of names that may represent either personal or shared labels)",
}),
priority: Property.Number({
displayName: 'Priority',
description: 'Task priority from 1 (normal) to 4 (urgent)',
required: false,
}),
due_date: Property.ShortText({
displayName: 'Due date',
description:
"Can be either a specific date in YYYY-MM-DD format relative to user's timezone, a specific date and time in RFC3339 format, or a human defined date (e.g. 'next Monday') using local time",
required: false,
}),
},

async run({ auth, propsValue }) {
const token = auth.access_token;
const { task_id, content, description, priority, due_date } = propsValue;
const labels = propsValue.labels as string[];
async run({ auth, propsValue }) {
const token = auth.access_token;
const { task_id, content, description, priority, due_date } = propsValue;
const labels = propsValue.labels as string[];

assertNotNullOrUndefined(token, 'token');
return await todoistRestClient.tasks.update({
token,
task_id,
content,
description,
labels,
priority,
due_date,
});
},
assertNotNullOrUndefined(token, 'token');
return await todoistRestClient.tasks.update({
token,
task_id,
content,
description,
labels,
priority,
due_date,
});
},
});
Loading

0 comments on commit 5d1c636

Please sign in to comment.