Skip to content

Commit 4a4bdcf

Browse files
authored
Merge pull request #3947 from Northeastern-Electric-Racing/#3913-overdue-task-endpoint
#3913 overdue task endpoint
2 parents 3790b84 + 91ee0e1 commit 4a4bdcf

7 files changed

Lines changed: 37 additions & 21 deletions

File tree

src/backend/src/prisma-query-args/tasks.query-args.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,20 @@ export const getTaskQueryArgs = (organizationId: string) =>
1717
export const getTaskPreviewQueryArgs = (organizationId: string) =>
1818
Prisma.validator<Prisma.TaskDefaultArgs>()({
1919
include: {
20-
wbsElement: true,
20+
wbsElement: {
21+
include: {
22+
project: {
23+
select: {
24+
projectId: true,
25+
wbsElement: {
26+
select: {
27+
name: true
28+
}
29+
}
30+
}
31+
}
32+
}
33+
},
2134
createdBy: getUserQueryArgs(organizationId),
2235
assignees: getUserQueryArgs(organizationId)
2336
}

src/backend/src/transformers/tasks.transformer.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,17 @@ const taskTransformer = (task: Prisma.TaskGetPayload<TaskQueryArgs>): Task => {
2626

2727
export const taskCardPreviewTransformer = (task: Prisma.TaskGetPayload<TaskPreviewQueryArgs>): TaskCardPreview => {
2828
return {
29-
...task,
29+
taskId: task.taskId,
30+
wbsNum: wbsNumOf(task.wbsElement),
31+
title: task.title,
32+
deadline: task.deadline ?? undefined,
3033
priority: convertTaskPriority(task.priority),
31-
deadline: task.deadline ?? undefined
34+
assignees: task.assignees.map((assignee) => ({
35+
userId: assignee.userId,
36+
firstName: assignee.firstName,
37+
lastName: assignee.lastName
38+
})),
39+
projectName: task.wbsElement?.project?.wbsElement?.name || 'Unknown Project'
3240
};
3341
};
3442

src/frontend/src/apis/tasks.api.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* See the LICENSE file in the repository root folder for details.
44
*/
55

6-
import { Task, TaskPriority, TaskStatus, WbsNumber, wbsPipe } from 'shared';
6+
import { Task, TaskCardPreview, TaskPriority, TaskStatus, WbsNumber, wbsPipe } from 'shared';
77
import axios from '../utils/axios';
88
import { apiUrls } from '../utils/urls';
99
import { taskTransformer } from './transformers/tasks.transformers';
@@ -114,7 +114,7 @@ export const deleteSingleTask = (taskId: string) => {
114114
};
115115

116116
export const getOverdueTasksByTeamLeader = (userId: string) => {
117-
return axios.get<Task[]>(apiUrls.overdueTasksByTeamLeadership(userId), {
117+
return axios.get<TaskCardPreview[]>(apiUrls.overdueTasksByTeamLeadership(userId), {
118118
transformResponse: (data) => JSON.parse(data).map(taskTransformer)
119119
});
120120
};

src/frontend/src/hooks/tasks.hooks.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55

66
import { useMutation, useQuery, useQueryClient } from 'react-query';
7-
import { WbsNumber, TaskPriority, TaskStatus, Task } from 'shared';
7+
import { WbsNumber, TaskPriority, TaskStatus, Task, TaskCardPreview } from 'shared';
88
import {
99
createSingleTask,
1010
deleteSingleTask,
@@ -148,7 +148,7 @@ export const useDeleteTask = () => {
148148
};
149149

150150
export const useOverdueTasksByTeamLeader = (userId: string) => {
151-
return useQuery<Task[], Error>([userId, 'tasks'], async () => {
151+
return useQuery<TaskCardPreview[], Error>([userId, 'tasks'], async () => {
152152
const { data } = await getOverdueTasksByTeamLeader(userId);
153153
return data;
154154
});

src/frontend/src/pages/HomePage/components/MyTeamsOverdueTasks.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ const NoOverdueTeamTaskDisplay = () => {
1616
return (
1717
<EmptyPageBlockDisplay
1818
icon={<CheckCircleOutlineOutlinedIcon sx={{ fontSize: 128 }} />}
19-
heading={"You're team is all caught up!"}
20-
message={"You're team has no overdue tasks!"}
19+
heading={'Your team is all caught up!'}
20+
message={'Your team has no overdue tasks!'}
2121
/>
2222
);
2323
};

src/frontend/src/pages/HomePage/components/TeamTaskCard.tsx

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,7 @@ import { Box, Card, CardContent, Chip, Link, Stack, Typography } from '@mui/mate
22
import { Link as RouterLink } from 'react-router-dom';
33
import { useTheme } from '@mui/system';
44
import React from 'react';
5-
import { Task, wbsPipe } from 'shared';
6-
import LoadingIndicator from '../../../components/LoadingIndicator';
7-
import ErrorPage from '../../ErrorPage';
8-
import { useSingleProject } from '../../../hooks/projects.hooks';
5+
import { Task, TaskCardPreview, wbsPipe } from 'shared';
96
import { routes } from '../../../utils/routes';
107
import { fullNamePipe } from '../../../utils/pipes';
118
import PeopleAltIcon from '@mui/icons-material/PeopleAlt';
@@ -14,15 +11,12 @@ import { taskPriorityColor } from '../../../utils/task.utils';
1411
import { formatDate } from '../../../utils/datetime.utils';
1512

1613
interface TeamTaskCardProps {
17-
task: Task;
14+
task: TaskCardPreview;
1815
taskNumber: number;
1916
}
2017

2118
const TeamTaskCard: React.FC<TeamTaskCardProps> = ({ task, taskNumber }) => {
2219
const theme = useTheme();
23-
const { data: project, isLoading, isError, error } = useSingleProject(task.wbsNum);
24-
if (isLoading || !project) return <LoadingIndicator />;
25-
if (isError) return <ErrorPage message={error.message} />;
2620

2721
return (
2822
<Card
@@ -49,7 +43,7 @@ const TeamTaskCard: React.FC<TeamTaskCardProps> = ({ task, taskNumber }) => {
4943
</Typography>
5044
<Link component={RouterLink} to={`${routes.PROJECTS}/${wbsPipe(task.wbsNum)}`} noWrap>
5145
<Typography fontWeight={'regular'} variant="subtitle2">
52-
{wbsPipe(task.wbsNum)} - {project.name}
46+
{wbsPipe(task.wbsNum)} - {task.projectName}
5347
</Typography>
5448
</Link>
5549
<Stack direction={'row'} spacing={1}>
@@ -60,7 +54,7 @@ const TeamTaskCard: React.FC<TeamTaskCardProps> = ({ task, taskNumber }) => {
6054
<Stack spacing={1}>
6155
<Chip
6256
sx={{
63-
background: taskPriorityColor(task)
57+
background: taskPriorityColor({ priority: task.priority } as Task)
6458
}}
6559
label={task.priority}
6660
size="medium"

src/shared/src/types/task-types.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,9 @@ export interface Task {
3434
status: TaskStatus;
3535
}
3636

37-
export type TaskCardPreview = Pick<Task, 'taskId' | 'title' | 'deadline' | 'priority'> & {
38-
assignees: { firstName: string; lastName: string }[];
37+
export type TaskCardPreview = Pick<Task, 'taskId' | 'title' | 'deadline' | 'priority' | 'wbsNum'> & {
38+
assignees: { userId: string; firstName: string; lastName: string }[];
39+
projectName: string;
3940
};
4041

4142
export interface TaskWithIndex extends Task {

0 commit comments

Comments
 (0)