Refactor widget and component, create simple functions to filter tasks data, add flag to enable Task List (WIP)
This commit is contained in:
parent
197b4a2f61
commit
379d556916
@ -128,6 +128,7 @@ You can also find a list of all available service widgets in the sidebar navigat
|
|||||||
- [Uptime Kuma](uptime-kuma.md)
|
- [Uptime Kuma](uptime-kuma.md)
|
||||||
- [UptimeRobot](uptimerobot.md)
|
- [UptimeRobot](uptimerobot.md)
|
||||||
- [UrBackup](urbackup.md)
|
- [UrBackup](urbackup.md)
|
||||||
|
- [Vikunja](vikunja.md)
|
||||||
- [Watchtower](watchtower.md)
|
- [Watchtower](watchtower.md)
|
||||||
- [WGEasy](wgeasy.md)
|
- [WGEasy](wgeasy.md)
|
||||||
- [WhatsUpDocker](whatsupdocker.md)
|
- [WhatsUpDocker](whatsupdocker.md)
|
||||||
|
|||||||
@ -151,6 +151,7 @@ nav:
|
|||||||
- widgets/services/uptime-kuma.md
|
- widgets/services/uptime-kuma.md
|
||||||
- widgets/services/uptimerobot.md
|
- widgets/services/uptimerobot.md
|
||||||
- widgets/services/urbackup.md
|
- widgets/services/urbackup.md
|
||||||
|
- widgets/services/vikunja.md
|
||||||
- widgets/services/watchtower.md
|
- widgets/services/watchtower.md
|
||||||
- widgets/services/wgeasy.md
|
- widgets/services/wgeasy.md
|
||||||
- widgets/services/whatsupdocker.md
|
- widgets/services/whatsupdocker.md
|
||||||
|
|||||||
@ -478,6 +478,9 @@ export function cleanServiceGroups(groups) {
|
|||||||
// unifi
|
// unifi
|
||||||
site,
|
site,
|
||||||
|
|
||||||
|
// vikunja
|
||||||
|
enableTaskList,
|
||||||
|
|
||||||
// wgeasy
|
// wgeasy
|
||||||
threshold,
|
threshold,
|
||||||
|
|
||||||
@ -633,6 +636,9 @@ export function cleanServiceGroups(groups) {
|
|||||||
if (type === "lubelogger") {
|
if (type === "lubelogger") {
|
||||||
if (vehicleID !== undefined) cleanedService.widget.vehicleID = parseInt(vehicleID, 10);
|
if (vehicleID !== undefined) cleanedService.widget.vehicleID = parseInt(vehicleID, 10);
|
||||||
}
|
}
|
||||||
|
if (type === "vikunja") {
|
||||||
|
if (enableTaskList !== undefined) cleanedService.widget.enableTaskList = enableTaskList;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return cleanedService;
|
return cleanedService;
|
||||||
|
|||||||
@ -4,6 +4,32 @@ import Container from "components/services/widget/container";
|
|||||||
import Block from "components/services/widget/block";
|
import Block from "components/services/widget/block";
|
||||||
import useWidgetAPI from "utils/proxy/use-widget-api";
|
import useWidgetAPI from "utils/proxy/use-widget-api";
|
||||||
|
|
||||||
|
// return Projects that are not Saved Filters
|
||||||
|
function getRealProjects(project) {
|
||||||
|
return project.id > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// return Tasks that have a real due date in 7 days or less
|
||||||
|
function get7dTasks(task) {
|
||||||
|
return (
|
||||||
|
new Date(task.dueDate).getTime() > new Date("0001-01-01T00:00:00Z").getTime() &&
|
||||||
|
new Date(task.dueDate).getTime() <= new Date(Date.now() + 604800000)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// return Tasks that have a real due date in the past
|
||||||
|
function getOverdue(task) {
|
||||||
|
return (
|
||||||
|
new Date(task.dueDate).getTime() > new Date("0001-01-01T00:00:00Z").getTime() &&
|
||||||
|
new Date(task.dueDate).getTime() <= new Date(Date.now())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// return Tasks that are not 100% complete
|
||||||
|
function getInProgress(task) {
|
||||||
|
return task.inProgress === true;
|
||||||
|
}
|
||||||
|
|
||||||
export default function Component({ service }) {
|
export default function Component({ service }) {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const { widget } = service;
|
const { widget } = service;
|
||||||
@ -30,14 +56,18 @@ export default function Component({ service }) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const projects = projectsData.length;
|
const projects = projectsData.filter(getRealProjects);
|
||||||
|
const tasks7d = tasksData.filter(get7dTasks);
|
||||||
|
const overdue = tasksData.filter(getOverdue);
|
||||||
|
const inProgress = tasksData.filter(getInProgress);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
// <>
|
||||||
<Container service={service}>
|
<Container service={service}>
|
||||||
<Block label="vikunja.projects" value={t("common.number", { value: projects })} />
|
<Block label="vikunja.projects" value={t("common.number", { value: projects.length })} />
|
||||||
<Block label="vikunja.tasks7d" value={t("common.number", { value: tasksData.tasks7d })} />
|
<Block label="vikunja.tasks7d" value={t("common.number", { value: tasks7d.length })} />
|
||||||
<Block label="vikunja.tasksOverdue" value={t("common.number", { value: tasksData.overdue })} />
|
<Block label="vikunja.tasksOverdue" value={t("common.number", { value: overdue.length })} />
|
||||||
<Block label="vikunja.tasksInProgress" value={t("common.number", { value: tasksData.inProgress })} />
|
<Block label="vikunja.tasksInProgress" value={t("common.number", { value: inProgress.length })} />
|
||||||
</Container>
|
</Container>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
|
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
|
||||||
import { jsonArrayFilter } from "utils/proxy/api-helpers";
|
import { asJson } from "utils/proxy/api-helpers";
|
||||||
|
|
||||||
const widget = {
|
const widget = {
|
||||||
api: `{url}/api/v1/{endpoint}`,
|
api: `{url}/api/v1/{endpoint}`,
|
||||||
@ -12,21 +12,14 @@ const widget = {
|
|||||||
tasks: {
|
tasks: {
|
||||||
endpoint: "tasks/all",
|
endpoint: "tasks/all",
|
||||||
params: ["filter", "sort_by"],
|
params: ["filter", "sort_by"],
|
||||||
map: (data) => ({
|
map: (data) =>
|
||||||
tasks7d: jsonArrayFilter(
|
asJson(data).map((task) => ({
|
||||||
data,
|
id: task.id,
|
||||||
(item) =>
|
title: task.title,
|
||||||
new Date(item.due_date).valueOf() > 978307168000 &&
|
priority: task.priority,
|
||||||
new Date(item.due_date).valueOf() <= new Date(Date.now() + 640800000).valueOf(),
|
dueDate: task.due_date,
|
||||||
).length,
|
inProgress: task.percent_done > 0 && task.percent_done < 1,
|
||||||
inProgress: jsonArrayFilter(data, (item) => 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,
|
|
||||||
}),
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user