1
1
import { createStore } from "vuex" ;
2
2
import createPersistedState from "vuex-persistedstate" ;
3
-
3
+ interface Todo {
4
+ //todos task interface
5
+ newId : number ;
6
+ task : string ;
7
+ dueDate : string | Date ;
8
+ priority : number ;
9
+ difficulty : number ;
10
+ xp : number ;
11
+ isCompleted : boolean ;
12
+ repeatEvery : number ;
13
+ repeatInterval : number ;
14
+ timesCompleted : number ;
15
+ streak : number ;
16
+ originalDueDate : string | Date ;
17
+ }
4
18
export default createStore ( {
5
19
state : {
6
20
//eslint-disable-next-line
7
- todos : [ ] as any [ ] ,
21
+ todos : [ ] as Todo [ ] ,
8
22
user : {
9
23
level : 1 as number , //set level to 1 as total XP is 0 when state is created
10
24
xp : 0 as number ,
@@ -34,9 +48,9 @@ export default createStore({
34
48
* Update user XP state when a user presses Complete button to complete the task.
35
49
*/
36
50
updateXp : ( state , payload ) => {
37
- const task = state . todos . find (
51
+ const task : Todo = state . todos . find (
38
52
( todo : { newId : number } ) => todo . newId === payload ,
39
- ) ;
53
+ ) as Todo ;
40
54
const daysToDue : number =
41
55
( Number ( new Date ( task . dueDate + " 23:59:59.999" ) ) -
42
56
Number ( new Date ( ) . setHours ( 23 , 59 , 59 , 999 ) ) ) /
@@ -64,7 +78,7 @@ export default createStore({
64
78
let dayTasksMultiplier : number ; //calculate XP and score multiplier for tasks completed in a day (today)
65
79
let tasksMultiplier : number ; //calculate score multiplier for total number of tasks completed
66
80
const activeTasks : number = state . todos . filter (
67
- ( taskList ) => ! taskList . completed ,
81
+ ( taskList ) => ! taskList . isCompleted ,
68
82
) . length ; //calculate the number of active tasks (tasks that are not completed) using array.filter
69
83
let activeTasksMultiplier : number ; //calculate score multiplier for number of active tasks (tasks that are not completed)
70
84
//calculate task repetition XP multiplier
@@ -435,7 +449,7 @@ export default createStore({
435
449
priority : payload . priority as number ,
436
450
difficulty : payload . difficulty as number ,
437
451
xp : payload . xp as number ,
438
- completed : payload . completed as boolean ,
452
+ isCompleted : payload . isCompleted as boolean ,
439
453
repeatEvery : payload . repeatEvery as number ,
440
454
repeatInterval : payload . repeatInterval as number ,
441
455
timesCompleted : payload . timesCompleted as number ,
@@ -448,12 +462,12 @@ export default createStore({
448
462
/**
449
463
* Complete the task when user presses the Complete button.
450
464
*/
451
- const item = state . todos . find (
465
+ const item : Todo = state . todos . find (
452
466
( todo : { newId : number } ) => todo . newId === payload ,
453
- ) ;
467
+ ) as Todo ;
454
468
if ( Number ( item . repeatInterval ) === 5 ) {
455
469
//if the task is a one-time only
456
- item . completed = ! item . completed ; //complete task item (set completed task to true)
470
+ item . isCompleted = ! item . isCompleted ; //complete task item (set completed task to true)
457
471
} else {
458
472
item . timesCompleted ++ ; //increment number of times tasks has been completed by 1
459
473
if ( Number ( item . repeatInterval ) === 1 ) {
@@ -592,13 +606,13 @@ export default createStore({
592
606
( todo : { newId : number } ) => todo . newId === payload ,
593
607
) ;
594
608
let deleteTask ;
595
- if ( ! state . todos [ index ] . completed ) {
609
+ if ( ! state . todos [ index ] . isCompleted ) {
596
610
//don't ask for confirmation when one-time task is completed
597
611
deleteTask = confirm (
598
612
`Do you want to delete the task ${ state . todos [ index ] . task } ?\nThis action cannot be undone.` ,
599
613
) as boolean ; //ask user to confirm task deletion
600
614
}
601
- if ( deleteTask || state . todos [ index ] . completed ) {
615
+ if ( deleteTask || state . todos [ index ] . isCompleted ) {
602
616
//delete task if one-time task is completed when the deleted button is clicked or when user confirms deletion alert
603
617
state . todos . splice ( index , 1 ) ; //delete task item
604
618
}
0 commit comments