load comic details
This commit is contained in:
@@ -4,7 +4,11 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="child">
|
<div class="child">
|
||||||
<div class="float-details-element">
|
<div class="float-details-element">
|
||||||
|
@if (comic()) {
|
||||||
|
<h2>{{ comic().title }}</h2>
|
||||||
|
} @else {
|
||||||
<h2>Comic Details</h2>
|
<h2>Comic Details</h2>
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
import { Component } from '@angular/core';
|
import { Component, inject, input } from '@angular/core';
|
||||||
import { ComicComicsListComponent } from "../comic-comics-list/comic-comics-list.component";
|
import { ComicComicsListComponent } from "../comic-comics-list/comic-comics-list.component";
|
||||||
|
import { ComicDetails } from './comic.model';
|
||||||
|
import { ActivatedRouteSnapshot, ResolveFn, RouterStateSnapshot } from '@angular/router';
|
||||||
|
import { ComicService } from './comic.service';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-comic-comics',
|
selector: 'app-comic-comics',
|
||||||
@@ -8,5 +11,13 @@ import { ComicComicsListComponent } from "../comic-comics-list/comic-comics-list
|
|||||||
styleUrl: './comic-comics.component.css'
|
styleUrl: './comic-comics.component.css'
|
||||||
})
|
})
|
||||||
export class ComicComicsComponent {
|
export class ComicComicsComponent {
|
||||||
|
comic = input.required<ComicDetails>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const comicResolver: ResolveFn<ComicDetails> = (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => {
|
||||||
|
const comicService = inject(ComicService);
|
||||||
|
const comicId = route.paramMap.get('comicId');
|
||||||
|
const comicDetails = comicService.loadComicDetails(comicId);
|
||||||
|
console.log(comicDetails);
|
||||||
|
return comicDetails;
|
||||||
|
};
|
||||||
|
|||||||
@@ -3,3 +3,20 @@ export interface Comic {
|
|||||||
title: string;
|
title: string;
|
||||||
completed: boolean;
|
completed: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface ComicWork {
|
||||||
|
worktype: string;
|
||||||
|
|
||||||
|
}
|
||||||
|
export interface ComicDetails {
|
||||||
|
id: string;
|
||||||
|
created: string;
|
||||||
|
title: string;
|
||||||
|
completed: boolean;
|
||||||
|
current_order: boolean;
|
||||||
|
weblink: string;
|
||||||
|
publisher: string;
|
||||||
|
volumes: [
|
||||||
|
name: string,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { HttpClient } from "@angular/common/http";
|
import { HttpClient } from "@angular/common/http";
|
||||||
import { inject, Injectable, signal } from "@angular/core";
|
import { inject, Injectable, signal } from "@angular/core";
|
||||||
import { Comic } from "./comic.model";
|
import { Comic, ComicDetails } from "./comic.model";
|
||||||
import { catchError, map, throwError } from "rxjs";
|
import { catchError, map, throwError } from "rxjs";
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
@@ -16,6 +16,23 @@ export class ComicService {
|
|||||||
return this.fetchComics('http://127.0.0.1:8800/api/comics/comics', 'Someting went wrong fetching comics. Please try again later.');
|
return this.fetchComics('http://127.0.0.1:8800/api/comics/comics', 'Someting went wrong fetching comics. Please try again later.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loadComicDetails(comicId: string | null) {
|
||||||
|
return this.fetchComicDetails('http://127.0.0.1:8800/api/comics/comics/' + comicId, 'Someting went wrong fetching comics. Please try again later.');
|
||||||
|
}
|
||||||
|
|
||||||
|
private fetchComicDetails(url: string, errorMessage: string) {
|
||||||
|
return this.httpClient.get<ComicDetails>(url).pipe(
|
||||||
|
map((resData) => {
|
||||||
|
console.log(resData);
|
||||||
|
return resData;
|
||||||
|
}),
|
||||||
|
catchError((error) => {
|
||||||
|
console.log(error);
|
||||||
|
return throwError(() => new Error(errorMessage));
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
private fetchComics(url: string, errorMessage: string) {
|
private fetchComics(url: string, errorMessage: string) {
|
||||||
return this.httpClient.get<Comic[]>(url).pipe(
|
return this.httpClient.get<Comic[]>(url).pipe(
|
||||||
map((resData) => resData),
|
map((resData) => resData),
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Routes } from "@angular/router";
|
import { Routes } from "@angular/router";
|
||||||
import { ComicArtistsComponent } from "../comic-artists/comic-artists.component";
|
import { ComicArtistsComponent } from "../comic-artists/comic-artists.component";
|
||||||
import { ComicPublishersComponent } from './../comic-publishers/comic-publishers.component';
|
import { ComicPublishersComponent } from './../comic-publishers/comic-publishers.component';
|
||||||
import { ComicComicsComponent } from "../comic-comics/comic-comics.component";
|
import { ComicComicsComponent, comicResolver } from "../comic-comics/comic-comics.component";
|
||||||
|
|
||||||
export const comicRoutes: Routes = [
|
export const comicRoutes: Routes = [
|
||||||
{
|
{
|
||||||
@@ -9,8 +9,11 @@ export const comicRoutes: Routes = [
|
|||||||
component: ComicComicsComponent
|
component: ComicComicsComponent
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'comics/:comicId',
|
path: 'comics/:comicId',
|
||||||
component: ComicComicsComponent,
|
component: ComicComicsComponent,
|
||||||
|
resolve: {
|
||||||
|
comic: comicResolver
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'publisher',
|
path: 'publisher',
|
||||||
|
|||||||
Reference in New Issue
Block a user