@@ -4,24 +4,41 @@ import TodoItem from './TodoItem';
44class TodoApp {
55 constructor ( ) {
66 this . projects = [ ] ;
7- // Add a default project and default todo for testing
8- this . addProject ( "Default" ) ;
9- let todo = new TodoItem ( ) ;
10- todo . title = "default Todo" ;
11- todo . description = "default desc" ;
12- todo . dueDate = new Date ( ) . toJSON ( ) . slice ( 0 , 10 ) ;
13- todo . priority = "low" ;
14- todo . completed = true ;
15- this . addTodoToProject ( "Default" , todo ) ;
7+ this . loadFromLocalStorage ( ) ;
8+ if ( this . projects . length === 0 ) {
9+ this . addProject ( "Default" ) ;
10+ }
11+ }
12+
13+ saveToLocalStorage ( ) {
14+ localStorage . setItem ( 'todoApp' , JSON . stringify ( this . projects ) ) ;
15+ }
16+
17+ loadFromLocalStorage ( ) {
18+ const data = localStorage . getItem ( 'todoApp' ) ;
19+ if ( data ) {
20+ const parsedData = JSON . parse ( data ) ;
21+ this . projects = parsedData . map ( projectData => {
22+ const project = new Project ( projectData . name ) ;
23+ project . todos = projectData . todos . map ( todoData => {
24+ const todo = new TodoItem ( todoData . title , todoData . description , todoData . dueDate , todoData . priority ) ;
25+ todo . completed = todoData . completed ;
26+ return todo ;
27+ } ) ;
28+ return project ;
29+ } ) ;
30+ }
1631 }
1732
1833 addProject ( name ) {
1934 const project = new Project ( name ) ;
2035 this . projects . push ( project ) ;
36+ this . saveToLocalStorage ( ) ;
2137 }
2238
2339 removeProject ( name ) {
2440 this . projects = this . projects . filter ( project => project . name !== name ) ;
41+ this . saveToLocalStorage ( ) ;
2542 }
2643
2744 getProject ( name ) {
@@ -36,6 +53,7 @@ class TodoApp {
3653 const project = this . getProject ( projectName ) ;
3754 if ( project ) {
3855 project . addTodo ( todo ) ;
56+ this . saveToLocalStorage ( ) ;
3957 } else {
4058 console . log ( `Project ${ projectName } does not exist.` ) ;
4159 }
@@ -45,6 +63,7 @@ class TodoApp {
4563 const project = this . getProject ( projectName ) ;
4664 if ( project ) {
4765 project . removeTodo ( todoIndex ) ;
66+ this . saveToLocalStorage ( ) ;
4867 } else {
4968 console . log ( `Project ${ projectName } does not exist.` ) ;
5069 }
@@ -60,16 +79,20 @@ class TodoApp {
6079 return todos ;
6180 } else {
6281 console . log ( `Project ${ projectName } does not exist.` ) ;
82+ return [ ] ;
6383 }
6484 }
6585
66- updateTodoCompletion ( todotitle , projectName ) {
86+ updateTodoCompletion ( todotitle , projectName ) {
6787 const project = this . getProject ( projectName ) ;
68- project . getTodos ( ) . forEach ( ( item ) => {
69- if ( item . title === todotitle ) {
70- item . toggleComplete ( ) ;
71- }
72- } ) ;
88+ if ( project ) {
89+ project . getTodos ( ) . forEach ( ( item ) => {
90+ if ( item . title === todotitle ) {
91+ item . toggleComplete ( ) ;
92+ }
93+ } ) ;
94+ this . saveToLocalStorage ( ) ;
95+ }
7396 }
7497}
7598
0 commit comments