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, }), }, },