Fin section 14 et 15 : programmation réactive et requêtes HTTP
parent
a789a10203
commit
108c2b17a7
@ -0,0 +1,15 @@
|
||||
import { Injectable } from '@angular/core';
|
||||
import { InMemoryDbService } from 'angular-in-memory-web-api';
|
||||
import { POKEMONS } from './pokemon/mock-pokemon-list';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root',
|
||||
})
|
||||
export class InMemoryDataService implements InMemoryDbService {
|
||||
createDb() {
|
||||
const pokemons = POKEMONS;
|
||||
return { pokemons };
|
||||
}
|
||||
|
||||
constructor() {}
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
<h2 class="center">Ajouter un pokémon</h2>
|
||||
<app-pokemon-form [pokemon]="pokemon"></app-pokemon-form>
|
@ -0,0 +1,15 @@
|
||||
import { Component, OnInit } from '@angular/core';
|
||||
import { Pokemon } from '../pokemon';
|
||||
|
||||
@Component({
|
||||
selector: 'app-add-pokemon',
|
||||
templateUrl: './add-pokemon.component.html',
|
||||
styles: [],
|
||||
})
|
||||
export class AddPokemonComponent implements OnInit {
|
||||
pokemon: Pokemon;
|
||||
|
||||
ngOnInit() {
|
||||
this.pokemon = new Pokemon();
|
||||
}
|
||||
}
|
@ -1,22 +1,74 @@
|
||||
import { HttpClient, HttpHeaders } from '@angular/common/http';
|
||||
import { Injectable } from '@angular/core';
|
||||
import { POKEMONS } from './mock-pokemon-list';
|
||||
import { catchError, mergeMap, Observable, of, tap } from 'rxjs';
|
||||
import { Pokemon } from './pokemon';
|
||||
|
||||
@Injectable()
|
||||
export class PokemonService {
|
||||
getPokemonList(): Pokemon[] {
|
||||
return POKEMONS;
|
||||
constructor(private http: HttpClient) {}
|
||||
|
||||
getPokemonList(): Observable<Pokemon[]> {
|
||||
return this.http.get<Pokemon[]>('api/pokemons').pipe(
|
||||
tap((pokemonList) => this.log(pokemonList)),
|
||||
catchError((error) => this.handleError(error, []))
|
||||
);
|
||||
}
|
||||
|
||||
getPokemonById(pokemonId: number): Observable<Pokemon | undefined> {
|
||||
return this.http.get<Pokemon>(`api/pokemons/${pokemonId}`).pipe(
|
||||
tap((pokemon) => this.log(pokemon)),
|
||||
catchError((error) => this.handleError(error, undefined))
|
||||
);
|
||||
}
|
||||
|
||||
getPokemonTypeList(): Observable<string[]> {
|
||||
return this.http.get<Pokemon[]>('api/pokemons').pipe(
|
||||
mergeMap((pokemons: Pokemon[]) => {
|
||||
const set = new Set<string>();
|
||||
pokemons.forEach((pokemon) =>
|
||||
pokemon.types.forEach((type) => set.add(type))
|
||||
);
|
||||
return [Array.from(set.values())];
|
||||
}),
|
||||
tap((pokemon) => this.log(pokemon)),
|
||||
catchError((error) => this.handleError(error, []))
|
||||
);
|
||||
}
|
||||
|
||||
updatePokemon(pokemon: Pokemon): Observable<null> {
|
||||
const httpOptions = {
|
||||
headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
|
||||
};
|
||||
return this.http.put('api/pokemons', pokemon, httpOptions).pipe(
|
||||
tap((response) => this.log(response)),
|
||||
catchError((error) => this.handleError(error, null))
|
||||
);
|
||||
}
|
||||
|
||||
addPokemon(pokemon: Pokemon): Observable<Pokemon> {
|
||||
const httpOptions = {
|
||||
headers: new HttpHeaders({ 'Content-Type': 'application/json' }),
|
||||
};
|
||||
|
||||
return this.http.post<Pokemon>('api/pokemons', pokemon, httpOptions).pipe(
|
||||
tap((response) => this.log(response)),
|
||||
catchError((error) => this.handleError(error, null))
|
||||
);
|
||||
}
|
||||
|
||||
deletePokemonById(pokemon: Pokemon): Observable<null> {
|
||||
return this.http.delete(`api/pokemons/${pokemon.id}`).pipe(
|
||||
tap((response) => this.log(response)),
|
||||
catchError((error) => this.handleError(error, null))
|
||||
);
|
||||
}
|
||||
|
||||
getPokemonById(pokemonId: number): Pokemon | undefined {
|
||||
return POKEMONS.find((pokemon) => pokemon.id === pokemonId);
|
||||
private log(response: any) {
|
||||
console.table(response);
|
||||
}
|
||||
|
||||
getPokemonTypeList(): string[] {
|
||||
const types: Set<string> = new Set();
|
||||
POKEMONS.forEach((pokemon) => {
|
||||
pokemon.types.forEach((type) => types.add(type));
|
||||
});
|
||||
return Array.from(types.values());
|
||||
private handleError(error: Error, errorValue: any) {
|
||||
console.error(error);
|
||||
return of(errorValue);
|
||||
}
|
||||
}
|
||||
|
@ -1,9 +1,25 @@
|
||||
export class Pokemon {
|
||||
id: number;
|
||||
name: string;
|
||||
hp: number;
|
||||
cp: number;
|
||||
name: string;
|
||||
picture: string;
|
||||
types: Array<string>;
|
||||
created: Date;
|
||||
|
||||
constructor(
|
||||
name: string = 'Enter a name...',
|
||||
hp: number = 100,
|
||||
cp: number = 10,
|
||||
picture: string = 'https://assets.pokemon.com/assets/cms2/img/pokedex/detail/xxx.png',
|
||||
types: string[] = ['Normal'],
|
||||
created: Date = new Date()
|
||||
) {
|
||||
this.hp = hp;
|
||||
this.cp = cp;
|
||||
this.name = name;
|
||||
this.picture = picture;
|
||||
this.types = types;
|
||||
this.created = created;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue