diff --git a/src/app/app.component.html b/src/app/app.component.html
index f348a5a..01c82a6 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -5,26 +5,3 @@
-
-
-
-
-
-
- Valido {{profileForm.valid}}
-
-
- Touched {{profileForm.touched}}
-
-
diff --git a/src/app/model/todo-item.ts b/src/app/model/todo-item.ts
index bdb4f8b..f4d4be4 100644
--- a/src/app/model/todo-item.ts
+++ b/src/app/model/todo-item.ts
@@ -1,6 +1,7 @@
export class TodoItem {
id: number;
description: string;
+ url: string;
isCompleted: boolean = false;
toggleCompleted() {
diff --git a/src/app/todo-app/todo-app.component.html b/src/app/todo-app/todo-app.component.html
index 786cc57..1153ad4 100644
--- a/src/app/todo-app/todo-app.component.html
+++ b/src/app/todo-app/todo-app.component.html
@@ -1,12 +1,18 @@
-
+
+
\ No newline at end of file
diff --git a/src/app/todo-app/todo-app.component.ts b/src/app/todo-app/todo-app.component.ts
index cc42271..1c78c7a 100644
--- a/src/app/todo-app/todo-app.component.ts
+++ b/src/app/todo-app/todo-app.component.ts
@@ -10,9 +10,8 @@ import { TodoService } from '../todo.service';
})
export class TodoAppComponent {
- constructor(
- private service: TodoService
- ) {}
+ constructor(private service: TodoService) {}
+ taskEditable:TodoItem = null;
getList() {
return this.service.list;
@@ -24,6 +23,12 @@ export class TodoAppComponent {
item.toggleCompleted();
}
onTodoItemCreated(task) {
- this.service.add(task)
+ this.service.add(task);
+ }
+ onTodoItemEdit(task: TodoItem){
+ this.taskEditable = task;
+ }
+ onTodoItemUpdated(task: TodoItem){
+ this.service.update(task);
}
}
diff --git a/src/app/todo-footer/todo-footer.component.html b/src/app/todo-footer/todo-footer.component.html
index a0f7423..b586dcc 100644
--- a/src/app/todo-footer/todo-footer.component.html
+++ b/src/app/todo-footer/todo-footer.component.html
@@ -1,2 +1,3 @@
+
Tasks Completed {{completedSize()}}
Tasks To do {{incompletedSize()}}
diff --git a/src/app/todo-form/todo-form.component.html b/src/app/todo-form/todo-form.component.html
index ec0ad47..7a2c74a 100644
--- a/src/app/todo-form/todo-form.component.html
+++ b/src/app/todo-form/todo-form.component.html
@@ -1,10 +1,15 @@
-
-
+
+
diff --git a/src/app/todo-form/todo-form.component.ts b/src/app/todo-form/todo-form.component.ts
index 3366020..7a56007 100644
--- a/src/app/todo-form/todo-form.component.ts
+++ b/src/app/todo-form/todo-form.component.ts
@@ -1,24 +1,53 @@
-import { Component, OnInit, Output, EventEmitter} from '@angular/core';
+import { Component, OnInit, Output, EventEmitter, Input, OnChanges } from '@angular/core';
import { TodoItem } from '../model/todo-item';
+import { AbstractControl, FormControl, FormGroup, Validators } from '@angular/forms';
@Component({
selector: 'app-todo-form',
templateUrl: './todo-form.component.html',
- styleUrls: ['./todo-form.component.scss']
+ styleUrls: ['./todo-form.component.scss'],
})
export class TodoFormComponent {
+ taskForm = new FormGroup({
+ taskDescription: new FormControl('', Validators.required),
+ url: new FormControl('', [Validators.required, myUrlValidator])
+ });
+ flagEdit:boolean = false;
@Output() add = new EventEmitter();
+ @Input() taskEditable:TodoItem = null;
+ @Output() save = new EventEmitter();
- save(description){
- if(!description.value || description.value === '') {
- return;
- }
+ saveTask() {
let task = new TodoItem();
- task.description = description.value;
- task.isCompleted = false;
- this.add.emit(task);
- description.value = '';
+ task.description = this.taskForm.value.taskDescription;
+ task.url = this.taskForm.value.url;
+ if (this.flagEdit){
+ task.id = this.taskEditable.id;
+ task.isCompleted = this.taskEditable.isCompleted;
+ this.save.emit(task);
+ }else{
+ this.add.emit(task);
+ }
+ this.flagEdit = false;
+ this.taskForm.patchValue({taskDescription: '', url: ''});
+ }
+
+ ngOnChanges():void{
+ if(this.taskEditable){
+ this.flagEdit = true;
+ this.taskForm.patchValue(this.taskEditable);
+ }
}
+
}
+export function myUrlValidator(control: AbstractControl){
+ const expression = /[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)?/gi;
+ const regex = new RegExp(expression);
+ if (!control.value.match(regex)){
+ return { urlValid: true}
+ }
+
+ return null;
+}
diff --git a/src/app/todo-list/todo-list.component.html b/src/app/todo-list/todo-list.component.html
index 127ec76..9f0ddc5 100644
--- a/src/app/todo-list/todo-list.component.html
+++ b/src/app/todo-list/todo-list.component.html
@@ -2,8 +2,11 @@
- {{task.description}}
+ {{task.description}}
+
{{task.url}}
+
+
diff --git a/src/app/todo-list/todo-list.component.scss b/src/app/todo-list/todo-list.component.scss
index 0096849..9ea67d1 100644
--- a/src/app/todo-list/todo-list.component.scss
+++ b/src/app/todo-list/todo-list.component.scss
@@ -13,3 +13,8 @@
display: flex;
justify-content: space-between;
}
+
+.list-item-url{
+ font-size: 1rem;
+ color: blue;
+}
\ No newline at end of file
diff --git a/src/app/todo-list/todo-list.component.ts b/src/app/todo-list/todo-list.component.ts
index fc5d8f0..a9219c8 100644
--- a/src/app/todo-list/todo-list.component.ts
+++ b/src/app/todo-list/todo-list.component.ts
@@ -1,26 +1,29 @@
-import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
+import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';
import { TodoItem } from '../model/todo-item';
+import { FormControl } from '@angular/forms';
@Component({
selector: 'app-todo-list',
templateUrl: './todo-list.component.html',
- styleUrls: ['./todo-list.component.scss']
+ styleUrls: ['./todo-list.component.scss'],
})
export class TodoListComponent implements OnInit {
@Input() list: any[];
@Output() itemRemoved = new EventEmitter();
@Output() itemStateChanged = new EventEmitter();
- constructor() { }
+ @Output() itemEdit = new EventEmitter();
+ constructor() {}
- ngOnInit() {
- }
+ ngOnInit() {}
removeItem(id) {
this.itemRemoved.emit(id);
}
- completeTask(item:TodoItem) {
+ completeTask(item: TodoItem) {
this.itemStateChanged.emit(item);
-
}
-}
\ No newline at end of file
+ editItem(task: TodoItem) {
+ this.itemEdit.emit(task);
+ }
+}
diff --git a/src/app/todo.service.ts b/src/app/todo.service.ts
index 9bba8cc..1ac284c 100644
--- a/src/app/todo.service.ts
+++ b/src/app/todo.service.ts
@@ -18,6 +18,11 @@ export class TodoService {
this.lastItemId += 10;
}
+ update(task){
+ const index = this.list.findIndex((element) => element.id === task.id);
+ this.list.splice(index, 1, task);
+ }
+
remove(id) {
const index = this.list.findIndex((element) => element.id === id);
this.list.splice(index, 1);