From 38796217148c576e61bf73bea51645c2c6a632ea Mon Sep 17 00:00:00 2001 From: vhsdream <67816022+vhsdream@users.noreply.github.com> Date: Sat, 5 Oct 2024 22:07:48 -0400 Subject: [PATCH] add overdue and in progress field blocks --- docs/widgets/services/vikunja.md | 6 +++++- public/locales/en/common.json | 4 +++- src/widgets/vikunja/component.jsx | 16 +++++++++++++--- src/widgets/vikunja/widget.js | 2 +- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/docs/widgets/services/vikunja.md b/docs/widgets/services/vikunja.md index 6bfc3c9ce..771d11f7d 100644 --- a/docs/widgets/services/vikunja.md +++ b/docs/widgets/services/vikunja.md @@ -5,12 +5,16 @@ description: Vikunja Widget Configuration Learn more about [Vikunja](https://vikunja.io). -Allowed fields: `["projects", "tasks"]`. +Allowed fields: `["projects", "tasks", "overdue", "inprogress"]`. "Projects" lists the number of non-archived Projects the user has access to. "Tasks" lists the number of tasks due within the next 7 days. +"Overdue" lists the number of all tasks overdue. + +"In Progress" lists the number of tasks with a progress percentage above 0% and below 100%. + ```yaml widget: type: vikunja diff --git a/public/locales/en/common.json b/public/locales/en/common.json index acbf4d28d..053380749 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -956,6 +956,8 @@ }, "vikunja": { "projects": "Total Active Projects", - "tasks": "Tasks Due This Week" + "tasks": "Tasks Due This Week", + "overdue": "Overdue Tasks", + "inprogress": "Tasks In Progress" } } diff --git a/src/widgets/vikunja/component.jsx b/src/widgets/vikunja/component.jsx index f8d537308..e1cc0ffae 100644 --- a/src/widgets/vikunja/component.jsx +++ b/src/widgets/vikunja/component.jsx @@ -13,17 +13,25 @@ export default function Component({ service }) { const { data: tasksData, error: tasksError } = useWidgetAPI(widget, "tasks", { filter: "done=false&&due_date<=now+7d", }); + const { data: overdueData, error: overdueError } = useWidgetAPI(widget, "tasks", { + filter: "done=false&&due_date<=now", + }); + const { data: inProgressData, error: inProgressError } = useWidgetAPI(widget, "tasks", { + filter: "done=false&&percent_done>0&&percent_done<100", + }); - if (projectsError || tasksError) { - const vikunjaError = projectsError ?? tasksError; + if (projectsError || tasksError || overdueError || inProgressError) { + const vikunjaError = projectsError ?? tasksError ?? overdueError ?? inProgressError; return ; } - if (!projectsData || !tasksData) { + if (!projectsData || !tasksData || !overdueData || !inProgressData) { return ( + + ); } @@ -32,6 +40,8 @@ export default function Component({ service }) { + + ); } diff --git a/src/widgets/vikunja/widget.js b/src/widgets/vikunja/widget.js index fa6bf2951..5aa7440eb 100644 --- a/src/widgets/vikunja/widget.js +++ b/src/widgets/vikunja/widget.js @@ -14,7 +14,7 @@ const widget = { }, tasks: { endpoint: "tasks/all", - // to filter by done=false and dueDate <= now+7d or whatever + // TODO: use filter (and other params?) to allow customizing fields/blocks params: ["filter"], map: (data) => ({ tasks: jsonArrayFilter(data, (item) => !item.done).length,