add overdue and in progress field blocks
This commit is contained in:
parent
139fba7521
commit
3879621714
@ -5,12 +5,16 @@ description: Vikunja Widget Configuration
|
|||||||
|
|
||||||
Learn more about [Vikunja](https://vikunja.io).
|
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.
|
"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" 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
|
```yaml
|
||||||
widget:
|
widget:
|
||||||
type: vikunja
|
type: vikunja
|
||||||
|
|||||||
@ -956,6 +956,8 @@
|
|||||||
},
|
},
|
||||||
"vikunja": {
|
"vikunja": {
|
||||||
"projects": "Total Active Projects",
|
"projects": "Total Active Projects",
|
||||||
"tasks": "Tasks Due This Week"
|
"tasks": "Tasks Due This Week",
|
||||||
|
"overdue": "Overdue Tasks",
|
||||||
|
"inprogress": "Tasks In Progress"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,17 +13,25 @@ export default function Component({ service }) {
|
|||||||
const { data: tasksData, error: tasksError } = useWidgetAPI(widget, "tasks", {
|
const { data: tasksData, error: tasksError } = useWidgetAPI(widget, "tasks", {
|
||||||
filter: "done=false&&due_date<=now+7d",
|
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) {
|
if (projectsError || tasksError || overdueError || inProgressError) {
|
||||||
const vikunjaError = projectsError ?? tasksError;
|
const vikunjaError = projectsError ?? tasksError ?? overdueError ?? inProgressError;
|
||||||
return <Container service={service} error={vikunjaError} />;
|
return <Container service={service} error={vikunjaError} />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!projectsData || !tasksData) {
|
if (!projectsData || !tasksData || !overdueData || !inProgressData) {
|
||||||
return (
|
return (
|
||||||
<Container service={service}>
|
<Container service={service}>
|
||||||
<Block label="vikunja.projects" />
|
<Block label="vikunja.projects" />
|
||||||
<Block label="vikunja.tasks" />
|
<Block label="vikunja.tasks" />
|
||||||
|
<Block label="vikunja.overdue" />
|
||||||
|
<Block label="vikunja.inprogress" />
|
||||||
</Container>
|
</Container>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -32,6 +40,8 @@ export default function Component({ service }) {
|
|||||||
<Container service={service}>
|
<Container service={service}>
|
||||||
<Block label="vikunja.projects" value={t("common.number", { value: projectsData.projects })} />
|
<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.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 })} />
|
||||||
</Container>
|
</Container>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -14,7 +14,7 @@ const widget = {
|
|||||||
},
|
},
|
||||||
tasks: {
|
tasks: {
|
||||||
endpoint: "tasks/all",
|
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"],
|
params: ["filter"],
|
||||||
map: (data) => ({
|
map: (data) => ({
|
||||||
tasks: jsonArrayFilter(data, (item) => !item.done).length,
|
tasks: jsonArrayFilter(data, (item) => !item.done).length,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user