mirror of
https://github.com/gethomepage/homepage.git
synced 2025-12-07 09:35:54 -08:00
Refactor widget and component, create simple functions to filter tasks data, add flag to enable Task List (WIP)
This commit is contained in:
@@ -128,6 +128,7 @@ You can also find a list of all available service widgets in the sidebar navigat
|
||||
- [Uptime Kuma](uptime-kuma.md)
|
||||
- [UptimeRobot](uptimerobot.md)
|
||||
- [UrBackup](urbackup.md)
|
||||
- [Vikunja](vikunja.md)
|
||||
- [Watchtower](watchtower.md)
|
||||
- [WGEasy](wgeasy.md)
|
||||
- [WhatsUpDocker](whatsupdocker.md)
|
||||
|
||||
@@ -151,6 +151,7 @@ nav:
|
||||
- widgets/services/uptime-kuma.md
|
||||
- widgets/services/uptimerobot.md
|
||||
- widgets/services/urbackup.md
|
||||
- widgets/services/vikunja.md
|
||||
- widgets/services/watchtower.md
|
||||
- widgets/services/wgeasy.md
|
||||
- widgets/services/whatsupdocker.md
|
||||
|
||||
@@ -478,6 +478,9 @@ export function cleanServiceGroups(groups) {
|
||||
// unifi
|
||||
site,
|
||||
|
||||
// vikunja
|
||||
enableTaskList,
|
||||
|
||||
// wgeasy
|
||||
threshold,
|
||||
|
||||
@@ -633,6 +636,9 @@ export function cleanServiceGroups(groups) {
|
||||
if (type === "lubelogger") {
|
||||
if (vehicleID !== undefined) cleanedService.widget.vehicleID = parseInt(vehicleID, 10);
|
||||
}
|
||||
if (type === "vikunja") {
|
||||
if (enableTaskList !== undefined) cleanedService.widget.enableTaskList = enableTaskList;
|
||||
}
|
||||
}
|
||||
|
||||
return cleanedService;
|
||||
|
||||
@@ -4,6 +4,32 @@ import Container from "components/services/widget/container";
|
||||
import Block from "components/services/widget/block";
|
||||
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 }) {
|
||||
const { t } = useTranslation();
|
||||
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 (
|
||||
// <>
|
||||
<Container service={service}>
|
||||
<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 })} />
|
||||
<Block label="vikunja.projects" value={t("common.number", { value: projects.length })} />
|
||||
<Block label="vikunja.tasks7d" value={t("common.number", { value: tasks7d.length })} />
|
||||
<Block label="vikunja.tasksOverdue" value={t("common.number", { value: overdue.length })} />
|
||||
<Block label="vikunja.tasksInProgress" value={t("common.number", { value: inProgress.length })} />
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import credentialedProxyHandler from "utils/proxy/handlers/credentialed";
|
||||
import { jsonArrayFilter } from "utils/proxy/api-helpers";
|
||||
import { asJson } from "utils/proxy/api-helpers";
|
||||
|
||||
const widget = {
|
||||
api: `{url}/api/v1/{endpoint}`,
|
||||
@@ -12,21 +12,14 @@ const widget = {
|
||||
tasks: {
|
||||
endpoint: "tasks/all",
|
||||
params: ["filter", "sort_by"],
|
||||
map: (data) => ({
|
||||
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.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,
|
||||
}),
|
||||
map: (data) =>
|
||||
asJson(data).map((task) => ({
|
||||
id: task.id,
|
||||
title: task.title,
|
||||
priority: task.priority,
|
||||
dueDate: task.due_date,
|
||||
inProgress: task.percent_done > 0 && task.percent_done < 1,
|
||||
})),
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user