From fec330cde4ffca8cadb6d969bfeab237fdf344ce Mon Sep 17 00:00:00 2001
From: vhsdream <67816022+vhsdream@users.noreply.github.com>
Date: Mon, 7 Oct 2024 19:41:35 -0400
Subject: [PATCH] reduce API calls by filtering in widget.js
---
docs/widgets/services/vikunja.md | 8 ++++----
public/locales/en/common.json | 8 ++++----
src/widgets/vikunja/component.jsx | 32 ++++++++++++++-----------------
src/widgets/vikunja/widget.js | 21 ++++++++++++++------
4 files changed, 37 insertions(+), 32 deletions(-)
diff --git a/docs/widgets/services/vikunja.md b/docs/widgets/services/vikunja.md
index 771d11f7d..f5563701c 100644
--- a/docs/widgets/services/vikunja.md
+++ b/docs/widgets/services/vikunja.md
@@ -5,15 +5,15 @@ description: Vikunja Widget Configuration
Learn more about [Vikunja](https://vikunja.io).
-Allowed fields: `["projects", "tasks", "overdue", "inprogress"]`.
+Allowed fields: `["projects", "tasks7d", "tasksOverdue", "tasksInProgress"]`.
"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.
+"Tasks 7d" lists the number of tasks due within the next 7 days.
-"Overdue" lists the number of all tasks overdue.
+"Tasks Overdue" lists the number of all tasks overdue.
-"In Progress" lists the number of tasks with a progress percentage above 0% and below 100%.
+"Tasks In Progress" lists the number of tasks with a progress percentage above 0% and below 100%.
```yaml
widget:
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 053380749..384f44bef 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -955,9 +955,9 @@
"none": "None"
},
"vikunja": {
- "projects": "Total Active Projects",
- "tasks": "Tasks Due This Week",
- "overdue": "Overdue Tasks",
- "inprogress": "Tasks In Progress"
+ "projects": "Active Projects",
+ "tasks7d": "Tasks Due This Week",
+ "tasksOverdue": "Overdue Tasks",
+ "tasksInProgress": "Tasks In Progress"
}
}
diff --git a/src/widgets/vikunja/component.jsx b/src/widgets/vikunja/component.jsx
index 0c289675f..59faa863b 100644
--- a/src/widgets/vikunja/component.jsx
+++ b/src/widgets/vikunja/component.jsx
@@ -6,42 +6,38 @@ import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) {
const { t } = useTranslation();
-
const { widget } = service;
const { data: projectsData, error: projectsError } = useWidgetAPI(widget, "projects");
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/d+1d",
- });
- const { data: inProgressData, error: inProgressError } = useWidgetAPI(widget, "tasks", {
- filter: "done=false&&percent_done>0&&percent_done<100",
+ filter: "done=false&&percent_done<1",
+ sort_by: "due_date",
});
- if (projectsError || tasksError || overdueError || inProgressError) {
- const vikunjaError = projectsError ?? tasksError ?? overdueError ?? inProgressError;
+ if (projectsError || tasksError) {
+ const vikunjaError = projectsError ?? tasksError;
return ;
}
- if (!projectsData || !tasksData || !overdueData || !inProgressData) {
+ if (!projectsData || !tasksData) {
return (
-
-
-
+
+
+
);
}
+ const projects = projectsData.length;
+
return (
-
-
-
-
+
+
+
+
);
}
diff --git a/src/widgets/vikunja/widget.js b/src/widgets/vikunja/widget.js
index 0e659b53d..2829847d4 100644
--- a/src/widgets/vikunja/widget.js
+++ b/src/widgets/vikunja/widget.js
@@ -8,16 +8,25 @@ const widget = {
mappings: {
projects: {
endpoint: "projects",
- map: (data) => ({
- projects: jsonArrayFilter(data, (item) => !item.isArchived).length,
- }),
},
tasks: {
endpoint: "tasks/all",
- // TODO: use filter (and other params?) to allow customizing fields/blocks
- params: ["filter"],
+ params: ["filter", "sort_by"],
map: (data) => ({
- tasks: jsonArrayFilter(data, (item) => !item.done).length,
+ tasks7d: jsonArrayFilter(
+ data,
+ (item) =>
+ new Date(item.due_date).valueOf() > 978307168000 &&
+ new Date(item.due_date).valueOf() <= new Date(Date.now() + 640800000).valueOf(),
+ ).length,
+ inProgress: jsonArrayFilter(data, (item) => !item.done && item.percent_done > 0 && item.percent_done < 1)
+ .length,
+ overdue: jsonArrayFilter(
+ data,
+ (item) =>
+ new Date(item.due_date).valueOf() > 978307168000 &&
+ new Date(item.due_date).valueOf() <= new Date(Date.now()),
+ ).length,
}),
},
},