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,