1
- import { GetTasks , MarkTaskComplete , UpdateDueDate } from '@/api/tasks'
1
+ import { DeleteTask , GetTasks , MarkTaskComplete , UpdateDueDate } from '@/api/tasks'
2
2
import { Task , getDueDateChipColor , getDueDateChipText } from '@/models/task'
3
3
import {
4
4
CancelRounded ,
5
5
SearchRounded ,
6
6
CheckBox ,
7
7
Edit ,
8
8
History ,
9
+ CalendarMonth ,
10
+ Delete ,
9
11
} from '@mui/icons-material'
10
12
import {
11
13
Container ,
@@ -25,6 +27,7 @@ import { setTitle } from '@/utils/dom'
25
27
import { getTextColorFromBackgroundColor } from '@/utils/colors'
26
28
import { sortTasksByDueDate } from '@/utils/tasks'
27
29
import { Loading } from '@/Loading'
30
+ import { ConfirmationModal } from '../Modals/Inputs/ConfirmationModal'
28
31
29
32
type TasksOverviewProps = object & WithNavigate
30
33
@@ -41,6 +44,8 @@ export class TasksOverview extends React.Component<
41
44
TasksOverviewState
42
45
> {
43
46
private dateModalRef = React . createRef < DateModal > ( )
47
+ private confirmationModalRef = React . createRef < ConfirmationModal > ( )
48
+ private taskBeingDeleted : Task | null = null
44
49
45
50
constructor ( props : TasksOverviewProps ) {
46
51
super ( props )
@@ -139,7 +144,39 @@ export class TasksOverview extends React.Component<
139
144
await this . setState ( {
140
145
taskId : task . id ,
141
146
} )
142
- this . dateModalRef . current ?. open ( )
147
+ this . dateModalRef . current ?. open ( task . next_due_date )
148
+ }
149
+
150
+ private onViewHistory = ( task : Task ) => {
151
+ const { navigate } = this . props
152
+ navigate ( NavigationPaths . TaskHistory ( task . id ) )
153
+ }
154
+
155
+ private onDeleteTask = async ( task : Task ) => {
156
+ this . taskBeingDeleted = task
157
+ this . confirmationModalRef . current ?. open ( )
158
+ }
159
+
160
+ private onDeleteConfirm = async ( isConfirmed : boolean ) => {
161
+ const task = this . taskBeingDeleted
162
+ this . taskBeingDeleted = null
163
+
164
+ if ( ! isConfirmed ) {
165
+ return
166
+ }
167
+
168
+ const { tasks } = this . state
169
+ if ( ! task ) {
170
+ throw new Error ( 'Task to delete is not set' )
171
+ }
172
+
173
+ await DeleteTask ( task . id )
174
+ const newTasks = tasks . filter ( t => t . id !== task . id )
175
+
176
+ this . setState ( {
177
+ tasks : newTasks ,
178
+ filteredTasks : newTasks ,
179
+ } )
143
180
}
144
181
145
182
render ( ) : React . ReactNode {
@@ -204,9 +241,9 @@ export class TasksOverview extends React.Component<
204
241
< thead >
205
242
< tr >
206
243
< th > Due</ th >
207
- < th > Task </ th >
244
+ < th > Title </ th >
208
245
< th > Labels</ th >
209
- < th > Action </ th >
246
+ < th > Actions </ th >
210
247
</ tr >
211
248
</ thead >
212
249
< tbody >
@@ -261,6 +298,14 @@ export class TasksOverview extends React.Component<
261
298
size = 'sm'
262
299
onClick = { ( ) => this . onReschedule ( task ) }
263
300
aria-setsize = { 2 }
301
+ >
302
+ < CalendarMonth />
303
+ </ IconButton >
304
+ < IconButton
305
+ variant = 'outlined'
306
+ size = 'sm'
307
+ onClick = { ( ) => this . onViewHistory ( task ) }
308
+ aria-setsize = { 2 }
264
309
>
265
310
< History />
266
311
</ IconButton >
@@ -271,6 +316,14 @@ export class TasksOverview extends React.Component<
271
316
>
272
317
< Edit />
273
318
</ IconButton >
319
+ < IconButton
320
+ variant = 'outlined'
321
+ size = 'sm'
322
+ onClick = { ( ) => this . onDeleteTask ( task ) }
323
+ aria-setsize = { 2 }
324
+ >
325
+ < Delete />
326
+ </ IconButton >
274
327
</ ButtonGroup >
275
328
</ td >
276
329
</ tr >
@@ -280,10 +333,17 @@ export class TasksOverview extends React.Component<
280
333
< DateModal
281
334
ref = { this . dateModalRef }
282
335
key = { taskId }
283
- current = { null }
284
336
title = { `Change due date` }
285
337
onClose = { this . handleChangeDueDate }
286
338
/>
339
+ < ConfirmationModal
340
+ ref = { this . confirmationModalRef }
341
+ title = 'Delete Task'
342
+ confirmText = 'Delete'
343
+ cancelText = 'Cancel'
344
+ message = 'Are you sure you want to delete this task?'
345
+ onClose = { this . onDeleteConfirm }
346
+ />
287
347
</ Container >
288
348
)
289
349
}
0 commit comments