48 lines
1.4 KiB
TypeScript
48 lines
1.4 KiB
TypeScript
import { Injectable } from '@angular/core';
|
|
|
|
import { Observable } from 'rxjs/Observable';
|
|
import { Observer } from 'rxjs/Observer';
|
|
|
|
import { Hero, HeroTaxReturn } from './hero';
|
|
|
|
@Injectable()
|
|
export class HeroesService {
|
|
heroes: Hero[] = [
|
|
{ id: 1, name: 'RubberMan', tid: '082-27-5678'},
|
|
{ id: 2, name: 'Tornado', tid: '099-42-4321'}
|
|
];
|
|
|
|
heroTaxReturns: HeroTaxReturn[] = [
|
|
new HeroTaxReturn(10, this.heroes[0], 35000),
|
|
new HeroTaxReturn(20, this.heroes[1], 1250000)
|
|
];
|
|
|
|
getHeroes(): Observable<Hero[]> {
|
|
return new Observable<Hero[]>((observer: Observer<Hero[]>) => {
|
|
observer.next(this.heroes);
|
|
observer.complete();
|
|
});
|
|
}
|
|
|
|
getTaxReturn(hero: Hero): Observable<HeroTaxReturn> {
|
|
return new Observable<HeroTaxReturn>((observer: Observer<HeroTaxReturn>) => {
|
|
const htr = this.heroTaxReturns.find(t => t.hero.id === hero.id);
|
|
observer.next(htr || new HeroTaxReturn(0, hero));
|
|
observer.complete();
|
|
});
|
|
}
|
|
|
|
saveTaxReturn(heroTaxReturn: HeroTaxReturn): Observable<HeroTaxReturn> {
|
|
return new Observable<HeroTaxReturn>((observer: Observer<HeroTaxReturn>) => {
|
|
const htr = this.heroTaxReturns.find(t => t.id === heroTaxReturn.id);
|
|
if (htr) {
|
|
heroTaxReturn = Object.assign(htr, heroTaxReturn); // demo: mutate
|
|
} else {
|
|
this.heroTaxReturns.push(heroTaxReturn);
|
|
}
|
|
observer.next(heroTaxReturn);
|
|
observer.complete();
|
|
});
|
|
}
|
|
}
|