Skip to content

Commit 7100fc6

Browse files
committed
order tasks by due date first then prio
1 parent 0ef78a3 commit 7100fc6

2 files changed

Lines changed: 15 additions & 9 deletions

File tree

src/frontend/src/pages/ProjectDetailPage/ProjectViewContainer/TaskList/v2/TaskCard.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ export const TaskCard = ({
7777
};
7878

7979
const priorityColor = task.priority === 'HIGH' ? '#ef4345' : task.priority === 'LOW' ? '#00ab41' : '#FFA500';
80+
const isOverdue = task.deadline != null && new Date(task.deadline) < new Date() && task.status !== 'DONE';
8081

8182
return (
8283
<>
@@ -107,7 +108,8 @@ export const TaskCard = ({
107108
sx={{
108109
opacity: snapshot.isDragging ? 0.9 : 1,
109110
transform: snapshot.isDragging ? 'rotate(-2deg)' : '',
110-
borderRadius: '5px'
111+
borderRadius: '5px',
112+
...(isOverdue && { border: '2px solid #ef4345' })
111113
}}
112114
elevation={snapshot.isDragging ? 3 : 1}
113115
>
@@ -152,8 +154,11 @@ export const TaskCard = ({
152154
)}
153155
{task.deadline && (
154156
<Box alignItems={'center'} justifyContent={'right'} display={'flex'}>
155-
<Schedule sx={{ fontSize: 16, mr: 0.5 }} />
156-
<Typography variant="body2" sx={{ fontSize: '0.875rem' }}>
157+
<Schedule sx={{ fontSize: 16, mr: 0.5, ...(isOverdue && { color: '#ef4345' }) }} />
158+
<Typography
159+
variant="body2"
160+
sx={{ fontSize: '0.875rem', ...(isOverdue && { color: '#ef4345', fontWeight: 'bold' }) }}
161+
>
157162
Due: {datePipe(task.deadline)}
158163
</Typography>
159164
</Box>

src/frontend/src/pages/ProjectDetailPage/ProjectViewContainer/TaskList/v2/statuses.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@ const rankTaskPriority = (priority: TaskPriority) => {
1616
return 0;
1717
};
1818

19-
const compareTaskPriorities = (priorityA: TaskPriority, priorityB: TaskPriority) => {
20-
return rankTaskPriority(priorityA) - rankTaskPriority(priorityB);
19+
const compareTasks = (taskA: Task, taskB: Task) => {
20+
const deadlineA = taskA.deadline ? new Date(taskA.deadline).getTime() : Infinity;
21+
const deadlineB = taskB.deadline ? new Date(taskB.deadline).getTime() : Infinity;
22+
if (deadlineA !== deadlineB) return deadlineA - deadlineB;
23+
return rankTaskPriority(taskB.priority) - rankTaskPriority(taskA.priority);
2124
};
2225

2326
export const getTasksByStatus = (unorderedTasks: Task[]) => {
@@ -28,11 +31,9 @@ export const getTasksByStatus = (unorderedTasks: Task[]) => {
2831
},
2932
statuses.reduce((obj, status) => ({ ...obj, [status]: [] }), {} as TasksByStatus)
3033
);
31-
// order each column by priority
34+
// order each column by due date, then priority as tiebreaker
3235
statuses.forEach((status) => {
33-
postsByStatus[status] = postsByStatus[status].sort((recordA: Task, recordB: Task) =>
34-
compareTaskPriorities(recordA.priority, recordB.priority)
35-
);
36+
postsByStatus[status] = postsByStatus[status].sort(compareTasks);
3637
});
3738
return postsByStatus;
3839
};

0 commit comments

Comments
 (0)