reduce API calls by filtering in widget.js

This commit is contained in:
vhsdream
2024-10-07 19:41:35 -04:00
parent f12e5dfb8a
commit fec330cde4
4 changed files with 37 additions and 32 deletions

View File

@@ -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 <Container service={service} error={vikunjaError} />;
}
if (!projectsData || !tasksData || !overdueData || !inProgressData) {
if (!projectsData || !tasksData) {
return (
<Container service={service}>
<Block label="vikunja.projects" />
<Block label="vikunja.tasks" />
<Block label="vikunja.overdue" />
<Block label="vikunja.inprogress" />
<Block label="vikunja.tasks7d" />
<Block label="vikunja.tasksOverdue" />
<Block label="vikunja.tasksInProgress" />
</Container>
);
}
const projects = projectsData.length;
return (
<Container service={service}>
<Block label="vikunja.projects" value={t("common.number", { value: projectsData.projects })} />
<Block label="vikunja.tasks" value={t("common.number", { value: tasksData.tasks })} />
<Block label="vikunja.overdue" value={t("common.number", { value: overdueData.tasks })} />
<Block label="vikunja.inprogress" value={t("common.number", { value: inProgressData.tasks })} />
<Block label="vikunja.projects" value={t("common.number", { value: projects })} />
<Block label="vikunja.tasks7d" value={t("common.number", { value: tasksData.tasks7d })} />
<Block label="vikunja.tasksOverdue" value={t("common.number", { value: tasksData.overdue })} />
<Block label="vikunja.tasksInProgress" value={t("common.number", { value: tasksData.inProgress })} />
</Container>
);
}