From 89d9bf87fa507bf2d7bb41f2d9ee19fa7da00241 Mon Sep 17 00:00:00 2001 From: kabrunko-dev Date: Wed, 13 Dec 2023 08:24:08 -0300 Subject: [PATCH] refactor(challenge-1): augment challenge Create city store Camelcase some student and teacher interface's field to remove lint warnings Move CardComponent's template to typescript file within decorator --- .../src/app/data-access/city.store.ts | 23 +++++++++++++ .../src/app/data-access/fake-http.service.ts | 10 +++--- .../projection/src/app/model/student.model.ts | 4 +-- .../projection/src/app/model/teacher.model.ts | 4 +-- .../src/app/ui/card/card.component.html | 27 --------------- .../src/app/ui/card/card.component.ts | 31 ++++++++++++++++-- .../projection/src/assets/img/city.png | Bin 0 -> 19933 bytes 7 files changed, 61 insertions(+), 38 deletions(-) create mode 100644 apps/angular/projection/src/app/data-access/city.store.ts delete mode 100644 apps/angular/projection/src/app/ui/card/card.component.html create mode 100644 apps/angular/projection/src/assets/img/city.png diff --git a/apps/angular/projection/src/app/data-access/city.store.ts b/apps/angular/projection/src/app/data-access/city.store.ts new file mode 100644 index 0000000..711dad1 --- /dev/null +++ b/apps/angular/projection/src/app/data-access/city.store.ts @@ -0,0 +1,23 @@ +import { Injectable } from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; +import { City } from '../model/city.model'; + +@Injectable({ + providedIn: 'root', +}) +export class CityStore { + private cities = new BehaviorSubject([]); + cities$ = this.cities.asObservable(); + + addAll(cities: City[]) { + this.cities.next(cities); + } + + addOne(student: City) { + this.cities.next([...this.cities.value, student]); + } + + deleteOne(id: number) { + this.cities.next(this.cities.value.filter((s) => s.id !== id)); + } +} diff --git a/apps/angular/projection/src/app/data-access/fake-http.service.ts b/apps/angular/projection/src/app/data-access/fake-http.service.ts index e21ce03..82a8f18 100644 --- a/apps/angular/projection/src/app/data-access/fake-http.service.ts +++ b/apps/angular/projection/src/app/data-access/fake-http.service.ts @@ -12,14 +12,14 @@ import { import { map, timer } from 'rxjs'; import { City } from '../model/city.model'; import { Student } from '../model/student.model'; -import { subject, Teacher } from '../model/teacher.model'; +import { Teacher, subject } from '../model/teacher.model'; const factoryTeacher = incrementalNumber(); export const randTeacher = () => ({ id: factoryTeacher(), - firstname: randFirstName(), - lastname: randLastName(), + firstName: randFirstName(), + lastName: randLastName(), subject: rand(subject), }); @@ -34,8 +34,8 @@ const factoryStudent = incrementalNumber(); export const randStudent = (): Student => ({ id: factoryStudent(), - firstname: randFirstName(), - lastname: randLastName(), + firstName: randFirstName(), + lastName: randLastName(), mainTeacher: teachers[randNumber({ max: teachers.length - 1 })], school: randWord(), }); diff --git a/apps/angular/projection/src/app/model/student.model.ts b/apps/angular/projection/src/app/model/student.model.ts index 00592d4..bc18e46 100644 --- a/apps/angular/projection/src/app/model/student.model.ts +++ b/apps/angular/projection/src/app/model/student.model.ts @@ -2,8 +2,8 @@ import { Teacher } from './teacher.model'; export interface Student { id: number; - firstname: string; - lastname: string; + firstName: string; + lastName: string; mainTeacher: Teacher; school: string; } diff --git a/apps/angular/projection/src/app/model/teacher.model.ts b/apps/angular/projection/src/app/model/teacher.model.ts index e904388..34b4241 100644 --- a/apps/angular/projection/src/app/model/teacher.model.ts +++ b/apps/angular/projection/src/app/model/teacher.model.ts @@ -9,7 +9,7 @@ export type Subject = (typeof subject)[number]; export interface Teacher { id: number; - firstname: string; - lastname: string; + firstName: string; + lastName: string; subject: Subject; } diff --git a/apps/angular/projection/src/app/ui/card/card.component.html b/apps/angular/projection/src/app/ui/card/card.component.html deleted file mode 100644 index 81affa1..0000000 --- a/apps/angular/projection/src/app/ui/card/card.component.html +++ /dev/null @@ -1,27 +0,0 @@ -
- - - -
- - -
- - -
diff --git a/apps/angular/projection/src/app/ui/card/card.component.ts b/apps/angular/projection/src/app/ui/card/card.component.ts index 37dd708..f06c9ae 100644 --- a/apps/angular/projection/src/app/ui/card/card.component.ts +++ b/apps/angular/projection/src/app/ui/card/card.component.ts @@ -8,7 +8,34 @@ import { ListItemComponent } from '../list-item/list-item.component'; @Component({ selector: 'app-card', - templateUrl: './card.component.html', + template: ` +
+ + + +
+ +
+ + +
+ `, standalone: true, imports: [NgIf, NgFor, ListItemComponent], }) @@ -21,7 +48,7 @@ export class CardComponent { constructor( private teacherStore: TeacherStore, - private studentStore: StudentStore + private studentStore: StudentStore, ) {} addNewItem() { diff --git a/apps/angular/projection/src/assets/img/city.png b/apps/angular/projection/src/assets/img/city.png new file mode 100644 index 0000000000000000000000000000000000000000..c600f4455b363c1f162d0f053190d10bcd0efdf3 GIT binary patch literal 19933 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 literal 0 HcmV?d00001