From 55fa8263d4bd2411974107bf3f887dbabfaeb164 Mon Sep 17 00:00:00 2001 From: Anish Pawaskar Date: Mon, 15 Jan 2024 14:51:57 +0530 Subject: [PATCH 1/4] fix progress update response --- src/app/services/progressesApi.ts | 2 +- .../ProgressForm/ProgressLayout.tsx | 46 +++++++++++++++---- src/pages/progress/[id].tsx | 2 +- 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/src/app/services/progressesApi.ts b/src/app/services/progressesApi.ts index 9436a90d2..9e110a7bd 100644 --- a/src/app/services/progressesApi.ts +++ b/src/app/services/progressesApi.ts @@ -3,7 +3,7 @@ import { progressDetails } from '@/types/standup.type'; type queryParamsType = { userId?: string; - taskId?: string; + taskId?: string | string[]; }; export const progressesApi = api.injectEndpoints({ diff --git a/src/components/ProgressForm/ProgressLayout.tsx b/src/components/ProgressForm/ProgressLayout.tsx index c1adc7144..a0f565580 100644 --- a/src/components/ProgressForm/ProgressLayout.tsx +++ b/src/components/ProgressForm/ProgressLayout.tsx @@ -8,23 +8,51 @@ import ProgressForm from './ProgressForm'; import styles from '@/components/ProgressForm/ProgressForm.module.scss'; import { questions } from '@/constants/ProgressUpdates'; -import { getTotalMissedUpdates } from '@/utils/getTotalMissedUpdate'; +import { getTotalMissedTaskProgressUpdate } from '@/utils/getTotalMissedTaskProgressUpdate'; import { useGetProgressDetailsQuery } from '@/app/services/progressesApi'; -import { useGetUserQuery } from '@/app/services/userApi'; +import { useGetTaskDetailsQuery } from '@/app/services/taskDetailsApi'; -const ProgressLayout: FC = () => { - const { data: user } = useGetUserQuery(); - const { data: userStandupdata } = useGetProgressDetailsQuery({ - userId: user?.id, - }); +interface ProgressLayoutPropsType { + taskId: string[] | undefined; +} + +const ProgressLayout: FC = ({ taskId }) => { + const { data: userStandupdata, isLoading: isProgressUpdateDetailsLoading } = + useGetProgressDetailsQuery( + { + taskId: taskId, + }, + { skip: taskId ? false : true } + ); + + const { data: taskDetailData, isLoading: isTaskDetailsLoading } = + useGetTaskDetailsQuery(taskId); + + const taskStartedOn = taskDetailData?.taskData?.createdAt; const standupDates = userStandupdata?.data?.map((element) => element.date); - const totalMissedUpdates = getTotalMissedUpdates(standupDates || []); + + let totalProgressMissedUpdates; + + if (!isTaskDetailsLoading && !isProgressUpdateDetailsLoading) { + if (standupDates) { + totalProgressMissedUpdates = getTotalMissedTaskProgressUpdate( + standupDates[0] + ); + } else { + totalProgressMissedUpdates = getTotalMissedTaskProgressUpdate( + taskStartedOn * 1000 + ); + } + } else { + totalProgressMissedUpdates = 0; + } + return ( <>
diff --git a/src/pages/progress/[id].tsx b/src/pages/progress/[id].tsx index 030b278a1..d8e477bbd 100644 --- a/src/pages/progress/[id].tsx +++ b/src/pages/progress/[id].tsx @@ -12,7 +12,7 @@ const ProgressUpdatesPage = () => { return ; } - return ; + return ; }; export default ProgressUpdatesPage; From fc6e4f8b23cd2aec411d35a7952fca8e7e68109d Mon Sep 17 00:00:00 2001 From: Anish Pawaskar Date: Mon, 15 Jan 2024 14:52:24 +0530 Subject: [PATCH 2/4] create util function and write test for it --- .../getTotalMissedTaskProgressUpdate.test.ts | 21 +++++++++ src/utils/getTotalMissedTaskProgressUpdate.ts | 47 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 __tests__/Utils/getTotalMissedTaskProgressUpdate.test.ts create mode 100644 src/utils/getTotalMissedTaskProgressUpdate.ts diff --git a/__tests__/Utils/getTotalMissedTaskProgressUpdate.test.ts b/__tests__/Utils/getTotalMissedTaskProgressUpdate.test.ts new file mode 100644 index 000000000..ac2b13216 --- /dev/null +++ b/__tests__/Utils/getTotalMissedTaskProgressUpdate.test.ts @@ -0,0 +1,21 @@ +import { getTotalMissedTaskProgressUpdate } from '@/utils/getTotalMissedTaskProgressUpdate'; + +describe('Get total missed task progress update', () => { + test('should return 1 if progress is not updated in last 3 days', () => { + jest.useFakeTimers().setSystemTime(new Date('13 january 2024')); + const result = getTotalMissedTaskProgressUpdate(1704795225 * 1000); + expect(result).toBe(1); + }); + + test('should return 0 if last progress is updated in 3 days', () => { + jest.useFakeTimers().setSystemTime(new Date('11 january 2024')); + const result = getTotalMissedTaskProgressUpdate(1704795225 * 1000); + expect(result).toBe(0); + }); + + test('should return 0 if the last progress is not updated in 3 days but the date includes sunday', () => { + jest.useFakeTimers().setSystemTime(new Date('8 january 2024')); + const result = getTotalMissedTaskProgressUpdate(1704445747000); + expect(result).toBe(0); + }); +}); diff --git a/src/utils/getTotalMissedTaskProgressUpdate.ts b/src/utils/getTotalMissedTaskProgressUpdate.ts new file mode 100644 index 000000000..50b1b4c65 --- /dev/null +++ b/src/utils/getTotalMissedTaskProgressUpdate.ts @@ -0,0 +1,47 @@ +import { TOTAL_MILLISECONDS_IN_A_HOUR } from '@/constants/date'; + +export function getTotalMissedTaskProgressUpdate(lastUpdated: number) { + const presentDateInUtc = new Date().toUTCString(); + const taskLastUpdatedOn = new Date(lastUpdated).toUTCString(); + + const presentDateMillisecond = new Date(presentDateInUtc).valueOf(); + const taskStartedOnMillisecond = new Date(taskLastUpdatedOn).valueOf(); + + let count = 0; + const sundays = getSundays(lastUpdated); + + const differenceInHours = Math.round( + (presentDateMillisecond - taskStartedOnMillisecond) / + TOTAL_MILLISECONDS_IN_A_HOUR + ); + + let missedProgressUpdate = Math.round(differenceInHours / 24); + if (sundays !== 0) { + missedProgressUpdate = missedProgressUpdate - sundays; + } + + if (missedProgressUpdate >= 3) { + for (let i = 1; i <= missedProgressUpdate; i++) { + if (i % 3 === 0) { + count++; + } + } + return count; + } else { + return count; + } +} + +function getSundays(taskStartedOn: number) { + const taskStartedOnDate = new Date(taskStartedOn); + const currentDate = new Date(); + let sundays = 0; + + while (taskStartedOnDate <= currentDate) { + if (taskStartedOnDate.getDay() === 0) { + sundays++; + } + taskStartedOnDate.setDate(taskStartedOnDate.getDate() + 1); + } + return sundays; +} From 3cc4340b2b8957ddad4536705408bb5bd703f730 Mon Sep 17 00:00:00 2001 From: Anish Pawaskar Date: Mon, 15 Jan 2024 18:49:42 +0530 Subject: [PATCH 3/4] fix typescript error --- src/app/services/taskDetailsApi.ts | 2 +- src/components/ProgressForm/ProgressLayout.tsx | 2 +- src/interfaces/task.type.ts | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/app/services/taskDetailsApi.ts b/src/app/services/taskDetailsApi.ts index c3099626f..31d76ffd0 100644 --- a/src/app/services/taskDetailsApi.ts +++ b/src/app/services/taskDetailsApi.ts @@ -56,7 +56,7 @@ const getTasksDependencyDetailsQueryFn = async ( export const taskDetailsApi = api.injectEndpoints({ endpoints: (build) => ({ - getTaskDetails: build.query({ + getTaskDetails: build.query({ query: (taskId): string => `${TASKS_URL}/${taskId}/details`, providesTags: ['Task_Details'], }), diff --git a/src/components/ProgressForm/ProgressLayout.tsx b/src/components/ProgressForm/ProgressLayout.tsx index a0f565580..01c02245d 100644 --- a/src/components/ProgressForm/ProgressLayout.tsx +++ b/src/components/ProgressForm/ProgressLayout.tsx @@ -40,7 +40,7 @@ const ProgressLayout: FC = ({ taskId }) => { ); } else { totalProgressMissedUpdates = getTotalMissedTaskProgressUpdate( - taskStartedOn * 1000 + Number(taskStartedOn) * 1000 ); } } else { diff --git a/src/interfaces/task.type.ts b/src/interfaces/task.type.ts index b408f1c5b..e3fde1610 100644 --- a/src/interfaces/task.type.ts +++ b/src/interfaces/task.type.ts @@ -6,6 +6,7 @@ type task = { type: string; links?: string[]; endsOn: number; + createdAt: string; startedOn: string; createdBy: string; assignee?: string; From 650ea6fe9281b2d426076fef5170bd69305fda80 Mon Sep 17 00:00:00 2001 From: Anish Pawaskar Date: Tue, 16 Jan 2024 00:09:53 +0530 Subject: [PATCH 4/4] add type to taskId --- src/app/services/taskDetailsApi.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/app/services/taskDetailsApi.ts b/src/app/services/taskDetailsApi.ts index 31d76ffd0..988e49447 100644 --- a/src/app/services/taskDetailsApi.ts +++ b/src/app/services/taskDetailsApi.ts @@ -56,7 +56,10 @@ const getTasksDependencyDetailsQueryFn = async ( export const taskDetailsApi = api.injectEndpoints({ endpoints: (build) => ({ - getTaskDetails: build.query({ + getTaskDetails: build.query< + taskDetailsDataType, + string[] | undefined | string + >({ query: (taskId): string => `${TASKS_URL}/${taskId}/details`, providesTags: ['Task_Details'], }),