File tree Expand file tree Collapse file tree
src/frontend/src/pages/ProjectDetailPage/ProjectViewContainer/TaskList/v2 Expand file tree Collapse file tree Original file line number Diff line number Diff 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 >
Original file line number Diff line number Diff 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
2326export 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} ;
You can’t perform that action at this time.
0 commit comments