11import { createStore } from "vuex" ;
22import 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+ }
418export default createStore ( {
519 state : {
620 //eslint-disable-next-line
7- todos : [ ] as any [ ] ,
21+ todos : [ ] as Todo [ ] ,
822 user : {
923 level : 1 as number , //set level to 1 as total XP is 0 when state is created
1024 xp : 0 as number ,
@@ -34,9 +48,9 @@ export default createStore({
3448 * Update user XP state when a user presses Complete button to complete the task.
3549 */
3650 updateXp : ( state , payload ) => {
37- const task = state . todos . find (
51+ const task : Todo = state . todos . find (
3852 ( todo : { newId : number } ) => todo . newId === payload ,
39- ) ;
53+ ) as Todo ;
4054 const daysToDue : number =
4155 ( Number ( new Date ( task . dueDate + " 23:59:59.999" ) ) -
4256 Number ( new Date ( ) . setHours ( 23 , 59 , 59 , 999 ) ) ) /
@@ -64,7 +78,7 @@ export default createStore({
6478 let dayTasksMultiplier : number ; //calculate XP and score multiplier for tasks completed in a day (today)
6579 let tasksMultiplier : number ; //calculate score multiplier for total number of tasks completed
6680 const activeTasks : number = state . todos . filter (
67- ( taskList ) => ! taskList . completed ,
81+ ( taskList ) => ! taskList . isCompleted ,
6882 ) . length ; //calculate the number of active tasks (tasks that are not completed) using array.filter
6983 let activeTasksMultiplier : number ; //calculate score multiplier for number of active tasks (tasks that are not completed)
7084 //calculate task repetition XP multiplier
@@ -435,7 +449,7 @@ export default createStore({
435449 priority : payload . priority as number ,
436450 difficulty : payload . difficulty as number ,
437451 xp : payload . xp as number ,
438- completed : payload . completed as boolean ,
452+ isCompleted : payload . isCompleted as boolean ,
439453 repeatEvery : payload . repeatEvery as number ,
440454 repeatInterval : payload . repeatInterval as number ,
441455 timesCompleted : payload . timesCompleted as number ,
@@ -448,12 +462,12 @@ export default createStore({
448462 /**
449463 * Complete the task when user presses the Complete button.
450464 */
451- const item = state . todos . find (
465+ const item : Todo = state . todos . find (
452466 ( todo : { newId : number } ) => todo . newId === payload ,
453- ) ;
467+ ) as Todo ;
454468 if ( Number ( item . repeatInterval ) === 5 ) {
455469 //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)
457471 } else {
458472 item . timesCompleted ++ ; //increment number of times tasks has been completed by 1
459473 if ( Number ( item . repeatInterval ) === 1 ) {
@@ -592,13 +606,13 @@ export default createStore({
592606 ( todo : { newId : number } ) => todo . newId === payload ,
593607 ) ;
594608 let deleteTask ;
595- if ( ! state . todos [ index ] . completed ) {
609+ if ( ! state . todos [ index ] . isCompleted ) {
596610 //don't ask for confirmation when one-time task is completed
597611 deleteTask = confirm (
598612 `Do you want to delete the task ${ state . todos [ index ] . task } ?\nThis action cannot be undone.` ,
599613 ) as boolean ; //ask user to confirm task deletion
600614 }
601- if ( deleteTask || state . todos [ index ] . completed ) {
615+ if ( deleteTask || state . todos [ index ] . isCompleted ) {
602616 //delete task if one-time task is completed when the deleted button is clicked or when user confirms deletion alert
603617 state . todos . splice ( index , 1 ) ; //delete task item
604618 }
0 commit comments