@@ -33,6 +33,7 @@ import { Datepicker } from "@/components/common/Datepicker/Datepicker"
33
33
import { CalendarPicker } from "@/components/common/Calendarpicker"
34
34
import { PRIMARY_COLOUR } from "@/config/style"
35
35
import { moveEventModalInput , showMoveEventModal } from "stateStore/MoveEventStore"
36
+ import next from "next/types"
36
37
37
38
const i18next = getI18nObject ( )
38
39
export const TaskEditorWithStateManagement = ( { input, onChange, showDeleteDailog, onServerResponse, closeEditor } : { input : TaskEditorInputType , onChange : Function , showDeleteDailog : Function , onServerResponse : Function , closeEditor : Function } ) => {
@@ -75,6 +76,7 @@ export const TaskEditorWithStateManagement = ({ input, onChange, showDeleteDailo
75
76
const [ category , setCategory ] = useState < string [ ] > ( [ ] )
76
77
const [ calendarDDLDisabled , setCalendarDDLDisabled ] = useState ( false )
77
78
const [ showMoveEventOption , setShowMoveEventOption ] = useState ( false )
79
+ const [ recurrenceObj , setRecurrenceObj ] = useState < any > ( { } )
78
80
const changeDoneStatus = ( isDone : boolean ) => {
79
81
if ( isDone ) {
80
82
const completedDate = getISO8601Date ( moment ( ) . toISOString ( ) )
@@ -131,7 +133,7 @@ export const TaskEditorWithStateManagement = ({ input, onChange, showDeleteDailo
131
133
// console.log("this.state.calendar_id at DDL", this.state.calendar_id)
132
134
}
133
135
134
- const checkInputForNewTask = async ( ) => {
136
+ const checkInputForNewTask = async ( isRecurring ?: boolean ) => {
135
137
if ( input ) {
136
138
if ( ! input . id ) {
137
139
//Task is New.
@@ -189,7 +191,10 @@ export const TaskEditorWithStateManagement = ({ input, onChange, showDeleteDailo
189
191
//Process done info .
190
192
if ( input . taskDone ) {
191
193
setTaskDone ( true )
192
- changeDoneStatus ( true )
194
+ // console.log("isRepeatingTask", isRepeatingTask)
195
+ if ( ! isRecurring ) {
196
+ changeDoneStatus ( true )
197
+ }
193
198
194
199
}
195
200
@@ -253,7 +258,11 @@ export const TaskEditorWithStateManagement = ({ input, onChange, showDeleteDailo
253
258
}
254
259
//Check and set repeating task parameters.
255
260
setRrule ( rruleToObject ( parsedData [ "rrule" ] ) )
261
+ const isRecurring = parsedData [ "rrule" ] ? true : false
256
262
if ( parsedData [ "rrule" ] ) {
263
+ const parsedRecurrenceObj = new RecurrenceHelper ( parsedData )
264
+ // console.log(parsedRecurrenceObj)
265
+ setRecurrenceObj ( parsedRecurrenceObj )
257
266
setIsRepeatingTask ( true )
258
267
}
259
268
if ( parsedData [ "priority" ] ) setPriority ( parsedData [ "priority" ] )
@@ -266,7 +275,7 @@ export const TaskEditorWithStateManagement = ({ input, onChange, showDeleteDailo
266
275
}
267
276
// console.log(parsedData)
268
277
// getLabels(parsedData["category"])
269
- checkInputForNewTask ( )
278
+ checkInputForNewTask ( isRecurring )
270
279
}
271
280
}
272
281
@@ -294,17 +303,43 @@ export const TaskEditorWithStateManagement = ({ input, onChange, showDeleteDailo
294
303
* Probably to set done for the new recurrenceid.
295
304
* {TODO}: Figure it out
296
305
*/
297
- let recurrenceObj = new RecurrenceHelper ( parsedDataFromDexie )
298
306
recurrences = _ . cloneDeep ( recurrenceObj . newRecurrence )
299
- if ( Object . keys ( recurrenceObj . newObj ) . length > 0 && recurrences ) {
300
- const nextupKey = recurrenceObj . getNextUpKey ( )
301
- recurrences [ nextupKey ] = recurrenceObj . newObj [ nextupKey ]
307
+ try {
308
+
309
+ if ( Object . keys ( recurrenceObj . newObj ) . length > 0 && recurrences ) {
310
+ const nextupKey = recurrenceObj . getNextUpKey ( )
311
+ if ( ! nextupKey ) {
312
+ toast . error ( "NextUpKey is empty!" )
313
+ return
314
+ }
315
+ recurrences [ nextupKey ] = recurrenceObj . newObj [ nextupKey ]
316
+ const completedDate = getISO8601Date ( moment ( ) . toISOString ( ) )
317
+ /**
318
+ * If done, set next repeating instance as completed.
319
+ */
320
+ if ( taskDone ) {
321
+ recurrences [ nextupKey ] [ "completed" ] = completedDate
322
+ recurrences [ nextupKey ] [ "completion" ] = "100"
323
+ recurrences [ nextupKey ] [ "status" ] = "COMPLETED"
324
+
325
+ } else {
326
+ recurrences [ nextupKey ] [ "completed" ] = ""
327
+ recurrences [ nextupKey ] [ "completion" ] = ""
328
+ recurrences [ nextupKey ] [ "status" ] = ""
329
+ }
330
+
331
+
332
+ if ( varNotEmpty ( recurrences [ nextupKey ] [ "recurrenceid" ] ) == false || ( varNotEmpty ( recurrences [ nextupKey ] [ "recurrenceid" ] ) && recurrences [ nextupKey ] [ "recurrenceid" ] == "" ) ) {
333
+ recurrences [ nextupKey ] [ "recurrenceid" ] = getISO8601Date ( nextupKey )
334
+ }
302
335
303
- if ( varNotEmpty ( recurrences [ nextupKey ] [ "recurrenceid" ] ) == false || ( varNotEmpty ( recurrences [ nextupKey ] [ "recurrenceid" ] ) && recurrences [ nextupKey ] [ "recurrenceid" ] == "" ) ) {
304
- recurrences [ nextupKey ] [ "recurrenceid" ] = getISO8601Date ( nextupKey )
305
- }
306
336
337
+ }
338
+ } catch ( e ) {
339
+ console . warn ( "Recurrence problem: " + summary , e , )
307
340
}
341
+
342
+
308
343
}
309
344
310
345
if ( ! summary ) {
@@ -316,12 +351,9 @@ export const TaskEditorWithStateManagement = ({ input, onChange, showDeleteDailo
316
351
//dueDateToSave = fixDueDate(dueDate)
317
352
dueDateToSave = moment ( moment ( dueDate ) . format ( dateFullFormat ) ) . toISOString ( )
318
353
}
319
- console . log ( "due date to save" , dueDate , taskStart )
354
+ // console.log("due date to save", dueDate, taskStart)
320
355
const valid = await checkifValid ( )
321
356
if ( valid ) {
322
- if ( taskDone ) {
323
-
324
- }
325
357
setSubmitting ( true )
326
358
const todoData = { due : dueDate , start : taskStart , summary : summary , created : parsedDataFromDexie . created , completion : completion , completed : completed , status : status , uid : uid , categories : category , priority : priority , relatedto : relatedto , lastmodified : "" , dtstamp : parsedDataFromDexie . dtstamp , description : description , rrule : rrule , recurrences : recurrences }
327
359
const finalTodoData = await generateNewTaskObject ( todoData , parsedDataFromDexie , unParsedData )
@@ -438,6 +470,11 @@ export const TaskEditorWithStateManagement = ({ input, onChange, showDeleteDailo
438
470
439
471
}
440
472
}
473
+
474
+ if ( isRepeatingTask ) {
475
+ //Check if the task can even be saved.
476
+
477
+ }
441
478
return true
442
479
}
443
480
@@ -517,7 +554,9 @@ export const TaskEditorWithStateManagement = ({ input, onChange, showDeleteDailo
517
554
518
555
const taskDoneChanged = ( e ) => {
519
556
setTaskDone ( e . target . checked )
520
- changeDoneStatus ( e . target . checked )
557
+ if ( ! isRepeatingTask ) {
558
+ changeDoneStatus ( e . target . checked )
559
+ }
521
560
522
561
}
523
562
const statusValueChanged = ( e ) => {
@@ -594,9 +633,8 @@ export const TaskEditorWithStateManagement = ({ input, onChange, showDeleteDailo
594
633
let repeatInfoMessage : JSX . Element = < > </ >
595
634
let dueDateFixed = ""
596
635
if ( isRepeatingTask ) {
597
- const repeatingInfo = new RecurrenceHelper ( parsedDataFromDexie )
598
- dueDateFixed = moment ( repeatingInfo . getNextDueDate ( ) ) . format ( dateFullFormat )
599
- repeatInfoMessage = ( < Alert variant = "warning" > { i18next . t ( "REPEAT_TASK_MESSAGE" ) + moment ( new Date ( repeatingInfo . getNextDueDate ( ) ) ) . format ( dateFormat ) } </ Alert > )
636
+ dueDateFixed = moment ( recurrenceObj . getNextDueDate ( ) ) . format ( dateFullFormat )
637
+ repeatInfoMessage = ( < Alert variant = "warning" > { i18next . t ( "REPEAT_TASK_MESSAGE" ) + moment ( recurrenceObj . getNextDueDate ( ) ) . format ( dateFormat ) } </ Alert > )
600
638
}
601
639
602
640
0 commit comments