From 2257fcb5d2d4fd767486120d3abae1427d910129 Mon Sep 17 00:00:00 2001 From: trueberryless Date: Fri, 5 Jul 2024 23:45:49 +0200 Subject: [PATCH] begin project version-patch --- src/pages/project/[id].tsx | 28 ++++++++++++---- src/pages/project/[id]/edit.tsx | 5 ++- src/utils/projectUtils.ts | 59 +++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 7 deletions(-) create mode 100644 src/utils/projectUtils.ts diff --git a/src/pages/project/[id].tsx b/src/pages/project/[id].tsx index 8eed267..6910979 100644 --- a/src/pages/project/[id].tsx +++ b/src/pages/project/[id].tsx @@ -39,6 +39,7 @@ import { } from "@/components/ui/table"; import StatusIconLabel from "@/components/projects/status"; import PriorityIconLabel from "@/components/projects/priority"; +import { calcPriorityComparison, calcStatusComparison } from "@/utils/projectUtils"; export default function Project() { const { user, setUser } = useUser(); @@ -47,6 +48,10 @@ export default function Project() { const project = user?.projects.find((project) => project.id === router.query.id); + if (!project) { + return
Project not found
; + } + return (
@@ -63,6 +68,9 @@ export default function Project() { + + +
@@ -92,22 +100,30 @@ export default function Project() { - Sales + Status -
+12,234
-

+19% from last month

+
+ +
+

+ {calcStatusComparison(user, project.status)} +

- Active Now + Priority -
+573
-

+201 since last hour

+
+ +
+

+ {calcPriorityComparison(user, project.priority)} +

diff --git a/src/pages/project/[id]/edit.tsx b/src/pages/project/[id]/edit.tsx index 40393ab..f168807 100644 --- a/src/pages/project/[id]/edit.tsx +++ b/src/pages/project/[id]/edit.tsx @@ -76,6 +76,9 @@ export default function EditProduct() { + + +
-
+
diff --git a/src/utils/projectUtils.ts b/src/utils/projectUtils.ts new file mode 100644 index 0000000..01b0fb1 --- /dev/null +++ b/src/utils/projectUtils.ts @@ -0,0 +1,59 @@ +import { User } from "@/models"; + +export function calcPriorityComparison(user: User | null | undefined, priority: string): string { + if (!user || !priority) { + return ""; + } + + const projects = user.projects || []; + const currentProject = projects.find((proj) => proj.priority === priority); + + if (!currentProject) { + return ""; + } + + const higherPriorityCount = projects.filter((proj) => { + return proj.priority === "high"; + }).length; + + const mediumPriorityCount = projects.filter((proj) => { + return proj.priority === "medium"; + }).length; + + const lowerPriorityCount = projects.filter((proj) => { + return proj.priority === "low"; + }).length; + + if (priority === "high") { + return `Higher priority than ${lowerPriorityCount + mediumPriorityCount} other projects`; + } else if (priority === "medium") { + return `Higher priority than ${lowerPriorityCount} other projects`; + } else { + return `Lower priority than ${higherPriorityCount + mediumPriorityCount} other projects`; + } +} + +export function calcStatusComparison(user: User | null | undefined, status: string): string { + if (!user || !status) { + return ""; + } + + const projects = user.projects || []; + const currentProject = projects.find((proj) => proj.status === status); + + if (!currentProject) { + return ""; + } + + const sameStatusCount = projects.filter( + (proj) => proj.status === status && proj.id !== currentProject.id + ).length; + + if (sameStatusCount === 0) { + return `No other projects have the same status`; + } else if (sameStatusCount === 1) { + return `1 other project has the same status`; + } else { + return `${sameStatusCount} other projects have the same status`; + } +}