1- import { skipTask , deleteTask , updateDueDate , setGroupBy , toggleGroup , toggleShowCompleted , fetchCompletedTasks } from '@/store/tasksSlice'
1+ import { skipTask , deleteTask , updateDueDate , setGroupBy , toggleGroup , toggleShowCompleted , fetchCompletedTasks , completeTask } from '@/store/tasksSlice'
22import { Task , TASK_UPDATE_EVENT } from '@/models/task'
33import {
44 ExpandCircleDown ,
@@ -12,6 +12,7 @@ import {
1212 SwitchAccessShortcut ,
1313 Visibility ,
1414 VisibilityOff ,
15+ PublishedWithChanges ,
1516} from '@mui/icons-material'
1617import {
1718 Container ,
@@ -54,6 +55,7 @@ type MyTasksProps = {
5455 toggleShowCompleted : ( ) => void
5556 fetchCompletedTasks : ( ) => Promise < any >
5657
58+ completeTask : ( taskId : number , endRecurrence : boolean ) => Promise < any >
5759 deleteTask : ( taskId : number ) => Promise < any >
5860 skipTask : ( taskId : number ) => Promise < any >
5961 updateDueDate : ( taskId : number , dueDate : string ) => Promise < any >
@@ -187,6 +189,18 @@ class MyTasksImpl extends React.Component<MyTasksProps, MyTasksState> {
187189 this . props . navigate ( NavigationPaths . TaskHistory ( task . id ) )
188190 }
189191
192+ private onCompleteAndStopRecurrenceClicked = async ( ) => {
193+ const { contextMenuTask : task } = this . state
194+ if ( task === null ) {
195+ throw new Error ( 'Attempted to complete and stop recurrence without a reference' )
196+ }
197+
198+ await this . props . completeTask ( task . id , true )
199+
200+ this . dismissMoreMenu ( )
201+ this . onEvent ( 'completed' )
202+ }
203+
190204 private onSkipTaskClicked = async ( ) => {
191205 const { contextMenuTask : task } = this . state
192206 if ( task === null ) {
@@ -384,10 +398,16 @@ class MyTasksImpl extends React.Component<MyTasksProps, MyTasksState> {
384398 ref = { this . menuRef }
385399 >
386400 { contextMenuTask && contextMenuTask . frequency . type !== 'once' && (
387- < MenuItem onClick = { this . onSkipTaskClicked } >
388- < SwitchAccessShortcut />
389- Skip to next due date
390- </ MenuItem >
401+ < >
402+ < MenuItem onClick = { this . onCompleteAndStopRecurrenceClicked } >
403+ < PublishedWithChanges />
404+ Complete and end recurrence
405+ </ MenuItem >
406+ < MenuItem onClick = { this . onSkipTaskClicked } >
407+ < SwitchAccessShortcut />
408+ Skip to next due date
409+ </ MenuItem >
410+ </ >
391411 ) }
392412 < MenuItem onClick = { this . onChangeDueDateClicked } >
393413 < MoreTime />
@@ -511,6 +531,7 @@ const mapDispatchToProps = (dispatch: AppDispatch) => ({
511531 toggleShowCompleted : ( ) => dispatch ( toggleShowCompleted ( ) ) ,
512532 fetchCompletedTasks : ( ) => dispatch ( fetchCompletedTasks ( ) ) ,
513533
534+ completeTask : ( taskId : number , endRecurrence : boolean ) => dispatch ( completeTask ( { taskId, endRecurrence } ) ) ,
514535 deleteTask : ( taskId : number ) => dispatch ( deleteTask ( taskId ) ) ,
515536 skipTask : ( taskId : number ) => dispatch ( skipTask ( taskId ) ) ,
516537 updateDueDate : ( taskId : number , dueDate : string ) => dispatch ( updateDueDate ( { taskId, dueDate } ) ) ,
0 commit comments