fix: better typing fake-db-service

This commit is contained in:
jdegand
2024-01-08 20:44:08 -05:00
parent c8b7c5d4a6
commit d4699a5b68

View File

@@ -7,12 +7,14 @@ import { Injectable } from '@angular/core';
import { randNumber } from '@ngneat/falso';
import { ComponentStore } from '@ngrx/component-store';
@Injectable({ providedIn: 'root' })
export class FakeDBService extends ComponentStore<{
interface AppState {
teachers: Teacher[];
students: Student[];
schools: School[];
}> {
}
@Injectable({ providedIn: 'root' })
export class FakeDBService extends ComponentStore<AppState> {
readonly teachers$ = this.select((state) => state.teachers);
readonly randomTeacher$ = this.select(
this.teachers$,
@@ -35,33 +37,45 @@ export class FakeDBService extends ComponentStore<{
super({ teachers: [], students: [], schools: [] });
}
addTeacher = this.updater((state, teacher: Teacher) => ({
addTeacher = this.updater(
(state, teacher: Teacher): AppState => ({
...state,
teachers: [...state.teachers, teacher],
}));
}),
);
updateTeacher = this.updater((state, teacher: Teacher) => ({
updateTeacher = this.updater(
(state, teacher: Teacher): AppState => ({
...state,
teachers: state.teachers.map((t) => (t.id === teacher.id ? teacher : t)),
}));
}),
);
addStudent = this.updater((state, student: Student) => ({
addStudent = this.updater(
(state, student: Student): AppState => ({
...state,
students: [...state.students, student],
}));
}),
);
updateSudent = this.updater((state, student: Student) => ({
updateSudent = this.updater(
(state, student: Student): AppState => ({
...state,
students: state.students.map((t) => (t.id === student.id ? student : t)),
}));
}),
);
addSchool = this.updater((state, school: School) => ({
addSchool = this.updater(
(state, school: School): AppState => ({
...state,
schools: [...state.schools, school],
}));
}),
);
updateSchool = this.updater((state, school: School) => ({
updateSchool = this.updater(
(state, school: School): AppState => ({
...state,
schools: state.schools.map((t) => (t.id === school.id ? school : t)),
}));
}),
);
}