From d187f62e7eb4dc6f30a8fba3e379f3f6eeeb3120 Mon Sep 17 00:00:00 2001 From: Natalia Fernandez Date: Thu, 16 Jul 2020 22:37:07 -0700 Subject: [PATCH 1/2] to do list done --- src/app/app.component.html | 6 +-- src/app/app.component.scss | 1 + src/app/app.module.ts | 6 ++- src/app/model/todo-item.ts | 21 +++++++- src/app/todo-app/todo-app.component.html | 31 ++++++++--- src/app/todo-app/todo-app.component.scss | 6 +++ src/app/todo-app/todo-app.component.ts | 17 +++++- .../todo-footer/todo-footer.component.html | 4 ++ .../todo-footer/todo-footer.component.scss | 0 .../todo-footer/todo-footer.component.spec.ts | 25 +++++++++ src/app/todo-footer/todo-footer.component.ts | 29 +++++++++++ src/app/todo-form/todo-form.component.html | 6 ++- src/app/todo-form/todo-form.component.scss | 7 +++ src/app/todo-form/todo-form.component.ts | 12 ++++- src/app/todo-list/todo-list.component.html | 49 ++++++++++++++++++ src/app/todo-list/todo-list.component.scss | 45 ++++++++++++++++ src/app/todo-list/todo-list.component.spec.ts | 25 +++++++++ src/app/todo-list/todo-list.component.ts | 43 +++++++++++++++ src/img-of-app/toDoList.png | Bin 0 -> 26616 bytes src/index.html | 2 + src/styles.scss | 4 +- 21 files changed, 319 insertions(+), 20 deletions(-) create mode 100644 src/app/todo-footer/todo-footer.component.html create mode 100644 src/app/todo-footer/todo-footer.component.scss create mode 100644 src/app/todo-footer/todo-footer.component.spec.ts create mode 100644 src/app/todo-footer/todo-footer.component.ts create mode 100644 src/app/todo-list/todo-list.component.html create mode 100644 src/app/todo-list/todo-list.component.scss create mode 100644 src/app/todo-list/todo-list.component.spec.ts create mode 100644 src/app/todo-list/todo-list.component.ts create mode 100644 src/img-of-app/toDoList.png diff --git a/src/app/app.component.html b/src/app/app.component.html index cebf745..b753a4e 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -1,5 +1 @@ - - - - - + \ No newline at end of file diff --git a/src/app/app.component.scss b/src/app/app.component.scss index e69de29..8b13789 100644 --- a/src/app/app.component.scss +++ b/src/app/app.component.scss @@ -0,0 +1 @@ + diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 1e49a4a..75ecaaa 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -6,12 +6,16 @@ import { AppComponent } from './app.component'; import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { TodoAppComponent } from './todo-app/todo-app.component'; import { TodoFormComponent } from './todo-form/todo-form.component'; +import { TodoListComponent } from './todo-list/todo-list.component'; +import { TodoFooterComponent } from './todo-footer/todo-footer.component'; @NgModule({ declarations: [ AppComponent, TodoAppComponent, - TodoFormComponent + TodoFormComponent, + TodoListComponent, + TodoFooterComponent ], imports: [ BrowserModule, diff --git a/src/app/model/todo-item.ts b/src/app/model/todo-item.ts index bdb4f8b..b0a555d 100644 --- a/src/app/model/todo-item.ts +++ b/src/app/model/todo-item.ts @@ -1,9 +1,28 @@ export class TodoItem { - id: number; + static idCounter: number = 0; + + id: number = 0; description: string; isCompleted: boolean = false; + constructor(description){ + this.id = TodoItem.getIdCount(); + this.description = description; + + TodoItem.increaseIdCount() + } + + static increaseIdCount() { + this.idCounter += 1; + } + + static getIdCount() { + return this.idCounter; + } + toggleCompleted() { this.isCompleted = !this.isCompleted; } + } + diff --git a/src/app/todo-app/todo-app.component.html b/src/app/todo-app/todo-app.component.html index 5d907a2..e236aa6 100644 --- a/src/app/todo-app/todo-app.component.html +++ b/src/app/todo-app/todo-app.component.html @@ -1,8 +1,23 @@ - - - - +
+
+
+
+
+
+

¡Mi lista de tareas!

+ +
+ + +
+ +
+
+
+
+
+ diff --git a/src/app/todo-app/todo-app.component.scss b/src/app/todo-app/todo-app.component.scss index e69de29..391f6cb 100644 --- a/src/app/todo-app/todo-app.component.scss +++ b/src/app/todo-app/todo-app.component.scss @@ -0,0 +1,6 @@ +.content{ + margin-top: 10px; + margin-left: auto; + margin-right: auto; + width: 60%; +} \ 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 700530b..849024f 100644 --- a/src/app/todo-app/todo-app.component.ts +++ b/src/app/todo-app/todo-app.component.ts @@ -7,8 +7,8 @@ import {TodoItem} from '../model/todo-item'; styleUrls: ['./todo-app.component.scss'] }) export class TodoAppComponent implements OnInit { - list = []; - lastItemId = 0; + list : TodoItem[] = []; + // lastItemId = 0; constructor() { } ngOnInit(): void { @@ -17,4 +17,17 @@ export class TodoAppComponent implements OnInit { onItemStateChanged(item: TodoItem) { item.toggleCompleted(); } + + onTodoItemCreated(newItem : TodoItem){ + this.list.push(newItem); + } + + onTodoItemRemoved(item : TodoItem){ + const index = this.list.findIndex(each => each.id === item.id); + this.list.splice(index,1); + } + + // onItemEdited(item : TodoItem){ + + // } } diff --git a/src/app/todo-footer/todo-footer.component.html b/src/app/todo-footer/todo-footer.component.html new file mode 100644 index 0000000..4642aa5 --- /dev/null +++ b/src/app/todo-footer/todo-footer.component.html @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/src/app/todo-footer/todo-footer.component.scss b/src/app/todo-footer/todo-footer.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/src/app/todo-footer/todo-footer.component.spec.ts b/src/app/todo-footer/todo-footer.component.spec.ts new file mode 100644 index 0000000..71f36d8 --- /dev/null +++ b/src/app/todo-footer/todo-footer.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TodoFooterComponent } from './todo-footer.component'; + +describe('TodoFooterComponent', () => { + let component: TodoFooterComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ TodoFooterComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(TodoFooterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/todo-footer/todo-footer.component.ts b/src/app/todo-footer/todo-footer.component.ts new file mode 100644 index 0000000..711a53a --- /dev/null +++ b/src/app/todo-footer/todo-footer.component.ts @@ -0,0 +1,29 @@ +import { Component, OnInit, Input } from '@angular/core'; + +import { TodoItem } from '../model/todo-item'; + +@Component({ + selector: 'app-todo-footer', + templateUrl: './todo-footer.component.html', + styleUrls: ['./todo-footer.component.scss'] +}) +export class TodoFooterComponent implements OnInit { + + @Input() list : TodoItem[] = []; + + constructor() { } + + ngOnInit(): void { + } + + Completeditems(){ + return this.list.filter(each => each.isCompleted === true).length; + } + + UnCompleteditems(){ + // return this.list.filter(each => each.isCompleted === true).length; + // Other form: + return this.list.length - this.Completeditems() + } + +} diff --git a/src/app/todo-form/todo-form.component.html b/src/app/todo-form/todo-form.component.html index 69e81bd..8a1230a 100644 --- a/src/app/todo-form/todo-form.component.html +++ b/src/app/todo-form/todo-form.component.html @@ -1 +1,5 @@ -

todo-form works!

+
+ + +
+ diff --git a/src/app/todo-form/todo-form.component.scss b/src/app/todo-form/todo-form.component.scss index e69de29..8b7546b 100644 --- a/src/app/todo-form/todo-form.component.scss +++ b/src/app/todo-form/todo-form.component.scss @@ -0,0 +1,7 @@ +body { + background-color: #f9f9fa +} + +ul{ + list-style-type: none; +} \ No newline at end of file diff --git a/src/app/todo-form/todo-form.component.ts b/src/app/todo-form/todo-form.component.ts index 78dc6ab..69cdbbd 100644 --- a/src/app/todo-form/todo-form.component.ts +++ b/src/app/todo-form/todo-form.component.ts @@ -1,5 +1,7 @@ import { Component, OnInit, Output, EventEmitter} from '@angular/core'; +import { TodoItem } from 'src/app/model/todo-item'; + @Component({ selector: 'app-todo-form', templateUrl: './todo-form.component.html', @@ -7,10 +9,18 @@ import { Component, OnInit, Output, EventEmitter} from '@angular/core'; }) export class TodoFormComponent implements OnInit { - @Output() add = new EventEmitter(); + @Output() add = new EventEmitter(); constructor() { } ngOnInit(): void { } + addItem(item){ + if (item.value === '') return; + + const newItem = new TodoItem(item.value); + item.value = ''; + item.focus(); + this.add.emit(newItem); + } } diff --git a/src/app/todo-list/todo-list.component.html b/src/app/todo-list/todo-list.component.html new file mode 100644 index 0000000..a105296 --- /dev/null +++ b/src/app/todo-list/todo-list.component.html @@ -0,0 +1,49 @@ +
+
    +
  • +
    + + + + {{ item.description }} (ID {{ item.id }}: {{ getEstado(item) }}) +
    +
  • +
+
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/app/todo-list/todo-list.component.scss b/src/app/todo-list/todo-list.component.scss new file mode 100644 index 0000000..4738fab --- /dev/null +++ b/src/app/todo-list/todo-list.component.scss @@ -0,0 +1,45 @@ +.completed { + background-color: #cbff7b; + text-decoration: line-through; +} + +.uncompleted { + background-color: lemonchiffon; +} + +li { + border-radius: 2em; + margin-bottom: 0.5em; +} + +ul{ + list-style-type: none; +} + +.btn { + margin-right: 10px; + font-weight: bold; + font-family: Verdana, Geneva, Tahoma, sans-serif; + font-size: small; + border-radius: 6em; +} + +.done{ + + background-color: #77dd77; + border-color: #77dd77; +} + +.remove{ + background-color: #c23b22; + border-color: #c23b22; +} + +.edit{ + background-color: #a2cadf; + border-color: #a2cadf; +} + +.atenuar{ + color: gray; +} diff --git a/src/app/todo-list/todo-list.component.spec.ts b/src/app/todo-list/todo-list.component.spec.ts new file mode 100644 index 0000000..9865d1d --- /dev/null +++ b/src/app/todo-list/todo-list.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { TodoListComponent } from './todo-list.component'; + +describe('TodoListComponent', () => { + let component: TodoListComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ TodoListComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(TodoListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/todo-list/todo-list.component.ts b/src/app/todo-list/todo-list.component.ts new file mode 100644 index 0000000..c9649b2 --- /dev/null +++ b/src/app/todo-list/todo-list.component.ts @@ -0,0 +1,43 @@ +import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; + +import { TodoItem } from '../model/todo-item'; + +@Component({ + selector: 'app-todo-list', + templateUrl: './todo-list.component.html', + styleUrls: ['./todo-list.component.scss'] +}) + + +export class TodoListComponent implements OnInit { + + @Input() list = []; + @Output() itemRemoved = new EventEmitter(); + @Output() itemStateChanged = new EventEmitter(); + @Output() itemEdited = new EventEmitter(); + + constructor() { } + + ngOnInit(): void { + } + + itemRemovedClick(item : TodoItem){ + this.itemRemoved.emit(item); + } + + itemStateChangedClick(item : TodoItem){ + this.itemStateChanged.emit(item); + } + + // itemEditClick(item : TodoItem){ + // this.itemEdited.emit(item); + // } + + getEstado(item : TodoItem){ + if (item.isCompleted) + return 'Completada'; + else + return 'Incompleta'; + + } +} diff --git a/src/img-of-app/toDoList.png b/src/img-of-app/toDoList.png new file mode 100644 index 0000000000000000000000000000000000000000..054ba1c2943d4ae69ddc1da98c3ec5fd7ae903aa GIT binary patch literal 26616 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 du3leV-xAJiR`U4FPzAdkpz1nmxvHjj{|C + + diff --git a/src/styles.scss b/src/styles.scss index 90d4ee0..dc941f5 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -1 +1,3 @@ -/* You can add global styles to this file, and also import other style files */ +body{ + background-color: powderblue; +} \ No newline at end of file From bd8a42df85143ee7a12f69af8e9ebdd80dcebea6 Mon Sep 17 00:00:00 2001 From: Natalia Fernandez Date: Sun, 19 Jul 2020 17:26:16 -0700 Subject: [PATCH 2/2] Cleaning functions --- src/app/todo-app/todo-app.component.ts | 8 ++------ src/app/todo-footer/todo-footer.component.ts | 9 ++------- src/app/todo-form/todo-form.component.ts | 8 ++------ src/app/todo-list/todo-list.component.scss | 1 - src/app/todo-list/todo-list.component.ts | 7 ++----- 5 files changed, 8 insertions(+), 25 deletions(-) diff --git a/src/app/todo-app/todo-app.component.ts b/src/app/todo-app/todo-app.component.ts index 849024f..67d6f51 100644 --- a/src/app/todo-app/todo-app.component.ts +++ b/src/app/todo-app/todo-app.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import { Component } from '@angular/core'; import {TodoItem} from '../model/todo-item'; @Component({ @@ -6,13 +6,9 @@ import {TodoItem} from '../model/todo-item'; templateUrl: './todo-app.component.html', styleUrls: ['./todo-app.component.scss'] }) -export class TodoAppComponent implements OnInit { +export class TodoAppComponent { list : TodoItem[] = []; // lastItemId = 0; - constructor() { } - - ngOnInit(): void { - } onItemStateChanged(item: TodoItem) { item.toggleCompleted(); diff --git a/src/app/todo-footer/todo-footer.component.ts b/src/app/todo-footer/todo-footer.component.ts index 711a53a..0c9eb1a 100644 --- a/src/app/todo-footer/todo-footer.component.ts +++ b/src/app/todo-footer/todo-footer.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, Input } from '@angular/core'; +import { Component, Input } from '@angular/core'; import { TodoItem } from '../model/todo-item'; @@ -7,15 +7,10 @@ import { TodoItem } from '../model/todo-item'; templateUrl: './todo-footer.component.html', styleUrls: ['./todo-footer.component.scss'] }) -export class TodoFooterComponent implements OnInit { +export class TodoFooterComponent { @Input() list : TodoItem[] = []; - constructor() { } - - ngOnInit(): void { - } - Completeditems(){ return this.list.filter(each => each.isCompleted === true).length; } diff --git a/src/app/todo-form/todo-form.component.ts b/src/app/todo-form/todo-form.component.ts index 69cdbbd..0a21baa 100644 --- a/src/app/todo-form/todo-form.component.ts +++ b/src/app/todo-form/todo-form.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, Output, EventEmitter} from '@angular/core'; +import { Component, Output, EventEmitter} from '@angular/core'; import { TodoItem } from 'src/app/model/todo-item'; @@ -7,13 +7,9 @@ import { TodoItem } from 'src/app/model/todo-item'; templateUrl: './todo-form.component.html', styleUrls: ['./todo-form.component.scss'] }) -export class TodoFormComponent implements OnInit { +export class TodoFormComponent { @Output() add = new EventEmitter(); - constructor() { } - - ngOnInit(): void { - } addItem(item){ if (item.value === '') return; diff --git a/src/app/todo-list/todo-list.component.scss b/src/app/todo-list/todo-list.component.scss index 4738fab..25962cf 100644 --- a/src/app/todo-list/todo-list.component.scss +++ b/src/app/todo-list/todo-list.component.scss @@ -25,7 +25,6 @@ ul{ } .done{ - background-color: #77dd77; border-color: #77dd77; } diff --git a/src/app/todo-list/todo-list.component.ts b/src/app/todo-list/todo-list.component.ts index c9649b2..ac9907a 100644 --- a/src/app/todo-list/todo-list.component.ts +++ b/src/app/todo-list/todo-list.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core'; +import { Component, Input, Output, EventEmitter } from '@angular/core'; import { TodoItem } from '../model/todo-item'; @@ -9,7 +9,7 @@ import { TodoItem } from '../model/todo-item'; }) -export class TodoListComponent implements OnInit { +export class TodoListComponent { @Input() list = []; @Output() itemRemoved = new EventEmitter(); @@ -18,9 +18,6 @@ export class TodoListComponent implements OnInit { constructor() { } - ngOnInit(): void { - } - itemRemovedClick(item : TodoItem){ this.itemRemoved.emit(item); }