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);