From 543cfad17675377c1b98c5131dc5dded24439b95 Mon Sep 17 00:00:00 2001 From: nzambello Date: Wed, 3 May 2023 10:03:24 +0200 Subject: [PATCH] feat: add totals in projects page --- app/models/project.server.ts | 3 +++ app/routes/projects.tsx | 38 +++++++++++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/app/models/project.server.ts b/app/models/project.server.ts index 375e0e7..0744e53 100644 --- a/app/models/project.server.ts +++ b/app/models/project.server.ts @@ -47,6 +47,9 @@ export async function getProjects({ orderBy: { [orderBy || 'createdAt']: order || 'desc' }, + include: { + timeEntries: true + }, skip: page && size ? (page - 1) * size : 0, take: size }); diff --git a/app/routes/projects.tsx b/app/routes/projects.tsx index 967e523..04dd54f 100644 --- a/app/routes/projects.tsx +++ b/app/routes/projects.tsx @@ -24,6 +24,8 @@ import { import { AlertTriangle, Edit3, Plus, Settings, Trash } from 'react-feather'; import { requireUserId } from '~/session.server'; import { getProjects } from '~/models/project.server'; +import SectionTimeElapsed from '~/components/SectionTimeElapsed'; +import { TimeEntry } from '~/models/timeEntry.server'; export const meta: MetaFunction = () => { return { @@ -185,7 +187,18 @@ export default function Projects() { marginLeft: '1rem' }} > - {project.name} +
+ {project.name} + {!!project.timeEntries.length && ( + + {project.timeEntries.length} entries + + )} +
+ {project.timeEntries.length > 0 && ( +
+ { + let duration = + (timeEntry.endTime + ? new Date(timeEntry.endTime).getTime() - + new Date(timeEntry.startTime).getTime() + : Date.now() - + new Date(timeEntry.startTime).getTime()) / 1000; + + return acc + duration; + }, 0)} + /> +
+ )}