diff --git a/package-lock.json b/package-lock.json
index 36935e3..54058b9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -16,6 +16,7 @@
"@angular/platform-browser": "~12.2.0",
"@angular/platform-browser-dynamic": "~12.2.0",
"@angular/router": "~12.2.0",
+ "ngx-cookie-service": "^12.0.3",
"rxjs": "~6.6.0",
"tslib": "^2.3.0",
"zone.js": "~0.11.4"
@@ -9295,6 +9296,18 @@
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
+ "node_modules/ngx-cookie-service": {
+ "version": "12.0.3",
+ "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-12.0.3.tgz",
+ "integrity": "sha512-F5xJBTrrreI2DERGOrO6U+L7s031HxTER+3Z4gDCwxdTl4AXmtWddMxxQVw7KflOLZ4InYEs6FjQsXmKU4HsJg==",
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
+ "peerDependencies": {
+ "@angular/common": "^12.0.0",
+ "@angular/core": "^12.0.0"
+ }
+ },
"node_modules/nice-napi": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz",
@@ -23104,6 +23117,14 @@
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
+ "ngx-cookie-service": {
+ "version": "12.0.3",
+ "resolved": "https://registry.npmjs.org/ngx-cookie-service/-/ngx-cookie-service-12.0.3.tgz",
+ "integrity": "sha512-F5xJBTrrreI2DERGOrO6U+L7s031HxTER+3Z4gDCwxdTl4AXmtWddMxxQVw7KflOLZ4InYEs6FjQsXmKU4HsJg==",
+ "requires": {
+ "tslib": "^2.0.0"
+ }
+ },
"nice-napi": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz",
diff --git a/package.json b/package.json
index 7d29ea3..3a2410b 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,7 @@
"@angular/platform-browser": "~12.2.0",
"@angular/platform-browser-dynamic": "~12.2.0",
"@angular/router": "~12.2.0",
+ "ngx-cookie-service": "^12.0.3",
"rxjs": "~6.6.0",
"tslib": "^2.3.0",
"zone.js": "~0.11.4"
diff --git a/src/app/add-task/add-task.component.html b/src/app/add-task/add-task.component.html
new file mode 100644
index 0000000..1179209
--- /dev/null
+++ b/src/app/add-task/add-task.component.html
@@ -0,0 +1 @@
+
add-task works!
diff --git a/src/app/add-task/add-task.component.scss b/src/app/add-task/add-task.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/add-task/add-task.component.spec.ts b/src/app/add-task/add-task.component.spec.ts
new file mode 100644
index 0000000..4b5deaa
--- /dev/null
+++ b/src/app/add-task/add-task.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { AddTaskComponent } from './add-task.component';
+
+describe('AddTaskComponent', () => {
+ let component: AddTaskComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ AddTaskComponent ]
+ })
+ .compileComponents();
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(AddTaskComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/add-task/add-task.component.ts b/src/app/add-task/add-task.component.ts
new file mode 100644
index 0000000..2023cf7
--- /dev/null
+++ b/src/app/add-task/add-task.component.ts
@@ -0,0 +1,15 @@
+import { Component, OnInit } from '@angular/core';
+
+@Component({
+ selector: 'app-add-task',
+ templateUrl: './add-task.component.html',
+ styleUrls: ['./add-task.component.scss']
+})
+export class AddTaskComponent implements OnInit {
+
+ constructor() { }
+
+ ngOnInit(): void {
+ }
+
+}
diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts
index 0297262..93ce6d6 100644
--- a/src/app/app-routing.module.ts
+++ b/src/app/app-routing.module.ts
@@ -1,7 +1,10 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
+import { MainPageComponent } from './main-page/main-page.component';
-const routes: Routes = [];
+const routes: Routes = [
+ { path: '', component: MainPageComponent}
+];
@NgModule({
imports: [RouterModule.forRoot(routes)],
diff --git a/src/app/app.component.html b/src/app/app.component.html
index c28b688..90c6b64 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -1,501 +1 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
{{ title }} app is running!
-
-
-
-
-
-
-
Resources
-
Here are some links to help you get started:
-
-
-
-
-
Next Steps
-
What do you want to do next with your app?
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ng generate component xyz
-
ng add @angular/material
-
ng add @angular/pwa
-
ng add _____
-
ng test
-
ng build
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index b1c6c96..b8db914 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -1,18 +1,26 @@
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
+import { CookieService } from 'ngx-cookie-service';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
+import { MainPageComponent } from './main-page/main-page.component';
+import { AddTaskComponent } from './add-task/add-task.component';
@NgModule({
declarations: [
- AppComponent
+ AppComponent,
+ MainPageComponent,
+ AddTaskComponent
],
imports: [
BrowserModule,
AppRoutingModule
],
- providers: [],
+ providers: [
+ CookieService,
+
+ ],
bootstrap: [AppComponent]
})
export class AppModule { }
diff --git a/src/app/core/entity/task.ts b/src/app/core/entity/task.ts
new file mode 100644
index 0000000..ec412e7
--- /dev/null
+++ b/src/app/core/entity/task.ts
@@ -0,0 +1,5 @@
+export interface Task {
+ title: string;
+ creationDate: Date;
+ description: string;
+}
\ No newline at end of file
diff --git a/src/app/core/service/task-persistence.service.spec.ts b/src/app/core/service/task-persistence.service.spec.ts
new file mode 100644
index 0000000..4a45874
--- /dev/null
+++ b/src/app/core/service/task-persistence.service.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+
+import { TaskPersistenceService } from './task-persistence.service';
+
+describe('TaskPersistenceService', () => {
+ let service: TaskPersistenceService;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({});
+ service = TestBed.inject(TaskPersistenceService);
+ });
+
+ it('should be created', () => {
+ expect(service).toBeTruthy();
+ });
+});
diff --git a/src/app/core/service/task-persistence.service.ts b/src/app/core/service/task-persistence.service.ts
new file mode 100644
index 0000000..6b7fbbf
--- /dev/null
+++ b/src/app/core/service/task-persistence.service.ts
@@ -0,0 +1,29 @@
+import { Injectable } from '@angular/core';
+import { CookieService } from 'ngx-cookie-service';
+import { Task } from '../entity/task';
+
+const COOKIE_NAME = 'todo-data';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class TaskPersistenceService {
+ constructor(
+ private _cookieService: CookieService
+ ) {}
+
+ save(tasks: Task[]): void {
+ this._cookieService.set(COOKIE_NAME, JSON.stringify(tasks));
+ }
+
+ getAll(): Task[] {
+ const serializedTasks = this._cookieService.get(COOKIE_NAME);
+ let result: Task[] = [];
+ try {
+ result = JSON.parse(serializedTasks);
+ } catch(jsonParseError) {
+ console.log(`Unable to parse tasks from cookie: ${serializedTasks}`);
+ }
+ return result;
+ }
+}
diff --git a/src/app/core/service/task.service.spec.ts b/src/app/core/service/task.service.spec.ts
new file mode 100644
index 0000000..0bbd214
--- /dev/null
+++ b/src/app/core/service/task.service.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+
+import { TaskService } from './task.service';
+
+describe('TaskService', () => {
+ let service: TaskService;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({});
+ service = TestBed.inject(TaskService);
+ });
+
+ it('should be created', () => {
+ expect(service).toBeTruthy();
+ });
+});
diff --git a/src/app/core/service/task.service.ts b/src/app/core/service/task.service.ts
new file mode 100644
index 0000000..bd8b24f
--- /dev/null
+++ b/src/app/core/service/task.service.ts
@@ -0,0 +1,32 @@
+import { Injectable } from '@angular/core';
+import { BehaviorSubject, Observable } from 'rxjs';
+import { Task } from '../entity/task';
+import { TaskPersistenceService } from './task-persistence.service';
+
+@Injectable({
+ providedIn: 'root'
+})
+export class TaskService {
+ _tasks: BehaviorSubject = new BehaviorSubject([]);
+
+ constructor(
+ private _taskPersistenceService: TaskPersistenceService
+ ) {
+ const tasks = this._taskPersistenceService.getAll() || [];
+ this._tasks.next(tasks);
+ }
+
+ get tasks(): Observable {
+ return this._tasks.asObservable();
+ }
+
+ add(task: Task): void {
+ const tasks = this._tasks.value;
+ tasks.push(task);
+ this._tasks.next(tasks);
+ }
+
+ _saveTasks(): void {
+ this._taskPersistenceService.save(this._tasks.value);
+ }
+}
diff --git a/src/app/main-page/main-page.component.html b/src/app/main-page/main-page.component.html
new file mode 100644
index 0000000..f7336d5
--- /dev/null
+++ b/src/app/main-page/main-page.component.html
@@ -0,0 +1,7 @@
+
+
Todo List
+
+
{{ task.title }}
+
{{ task.description }}
+
+
\ No newline at end of file
diff --git a/src/app/main-page/main-page.component.scss b/src/app/main-page/main-page.component.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/app/main-page/main-page.component.spec.ts b/src/app/main-page/main-page.component.spec.ts
new file mode 100644
index 0000000..c2d5899
--- /dev/null
+++ b/src/app/main-page/main-page.component.spec.ts
@@ -0,0 +1,25 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { MainPageComponent } from './main-page.component';
+
+describe('MainPageComponent', () => {
+ let component: MainPageComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ declarations: [ MainPageComponent ]
+ })
+ .compileComponents();
+ });
+
+ beforeEach(() => {
+ fixture = TestBed.createComponent(MainPageComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/src/app/main-page/main-page.component.ts b/src/app/main-page/main-page.component.ts
new file mode 100644
index 0000000..c6f259d
--- /dev/null
+++ b/src/app/main-page/main-page.component.ts
@@ -0,0 +1,21 @@
+import { Component, OnInit } from '@angular/core';
+import { Task } from '../core/entity/task';
+import { TaskService } from '../core/service/task.service';
+
+@Component({
+ selector: 'app-main-page',
+ templateUrl: './main-page.component.html',
+ styleUrls: ['./main-page.component.scss']
+})
+export class MainPageComponent implements OnInit {
+ tasks: Task[] = [];
+
+ constructor(
+ private _taskService: TaskService
+ ) {}
+
+ ngOnInit(): void {
+ this._taskService.tasks.subscribe(tasks => this.tasks = tasks);
+ }
+
+}