Moves the `angular-in-memory-web-api` project into the main repository in order to make it easier to maintain and release. PR Close #37182
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /**
 | |
|  * @license
 | |
|  * Copyright Google LLC All Rights Reserved.
 | |
|  *
 | |
|  * Use of this source code is governed by an MIT-style license that can be
 | |
|  * found in the LICENSE file at https://angular.io/license
 | |
|  */
 | |
| 
 | |
| import {HttpClient, HttpHeaders, HttpParams} from '@angular/common/http';
 | |
| import {Injectable} from '@angular/core';
 | |
| import {Observable, throwError} from 'rxjs';
 | |
| import {catchError} from 'rxjs/operators';
 | |
| 
 | |
| import {Hero} from './hero';
 | |
| import {HeroService} from './hero-service';
 | |
| 
 | |
| const cudOptions = {
 | |
|   headers: new HttpHeaders({'Content-Type': 'application/json'})
 | |
| };
 | |
| 
 | |
| @Injectable()
 | |
| export class HttpClientHeroService extends HeroService {
 | |
|   constructor(private http: HttpClient) {
 | |
|     super();
 | |
|   }
 | |
| 
 | |
|   getHeroes(): Observable<Hero[]> {
 | |
|     return this.http.get<Hero[]>(this.heroesUrl).pipe(catchError(this.handleError));
 | |
|   }
 | |
| 
 | |
|   // This get-by-id will 404 when id not found
 | |
|   getHero(id: number): Observable<Hero> {
 | |
|     const url = `${this.heroesUrl}/${id}`;
 | |
|     return this.http.get<Hero>(url).pipe(catchError(this.handleError));
 | |
|   }
 | |
| 
 | |
|   // This get-by-id does not 404; returns undefined when id not found
 | |
|   // getHero<Data>(id: number): Observable<Hero> {
 | |
|   //   const url = `${this._heroesUrl}/?id=${id}`;
 | |
|   //   return this.http.get<Hero[]>(url)
 | |
|   //     .map(heroes => heroes[0] as Hero)
 | |
|   //     .catch(this.handleError);
 | |
|   // }
 | |
| 
 | |
|   addHero(name: string): Observable<Hero> {
 | |
|     const hero = {name};
 | |
| 
 | |
|     return this.http.post<Hero>(this.heroesUrl, hero, cudOptions)
 | |
|         .pipe(catchError(this.handleError));
 | |
|   }
 | |
| 
 | |
|   deleteHero(hero: Hero|number): Observable<Hero> {
 | |
|     const id = typeof hero === 'number' ? hero : hero.id;
 | |
|     const url = `${this.heroesUrl}/${id}`;
 | |
| 
 | |
|     return this.http.delete<Hero>(url, cudOptions).pipe(catchError(this.handleError));
 | |
|   }
 | |
| 
 | |
|   searchHeroes(term: string): Observable<Hero[]> {
 | |
|     term = term.trim();
 | |
|     // add safe, encoded search parameter if term is present
 | |
|     const options = term ? {params: new HttpParams().set('name', term)} : {};
 | |
| 
 | |
|     return this.http.get<Hero[]>(this.heroesUrl, options).pipe(catchError(this.handleError));
 | |
|   }
 | |
| 
 | |
|   updateHero(hero: Hero): Observable<Hero> {
 | |
|     return this.http.put<Hero>(this.heroesUrl, hero, cudOptions).pipe(catchError(this.handleError));
 | |
|   }
 | |
| 
 | |
|   private handleError(error: any) {
 | |
|     // In a real world app, we might send the error to remote logging infrastructure
 | |
|     // and reformat for user consumption
 | |
|     return throwError(error);
 | |
|   }
 | |
| }
 |