From cee5b62469dbb9ef01ac2d14327f1b0efffd04cf Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Tue, 4 Aug 2020 03:16:20 +0200 Subject: [PATCH] Adding the people page --- src/app/app-routing.module.ts | 19 +++++++++++++--- .../items-grid/items-grid.component.html | 3 +-- .../items-grid/items-grid.component.ts | 22 ++++++++++++++++--- .../pages/collection/collection.component.ts | 8 +++---- src/models/people.ts | 7 ++++-- src/models/show.ts | 18 +++++++++++++++ 6 files changed, 63 insertions(+), 14 deletions(-) diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 8cc729b9..34bdfd45 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -18,6 +18,7 @@ import {Show} from "../models/show"; import {ItemResolver} from "./services/resolvers/item-resolver.service"; import {CollectionComponent} from "./pages/collection/collection.component"; import {Collection} from "../models/collection"; +import {People} from "../models/people"; const routes: Routes = [ {path: "browse", component: ItemsGridComponent, pathMatch: "full", @@ -37,14 +38,26 @@ const routes: Routes = [ canActivate: [AuthGuard.forPermissions("read")] }, {path: "collection/:slug", component: CollectionComponent, - resolve: { collection: ItemResolver.forResource("collections/:slug") }, + resolve: + { + collection: ItemResolver.forResource("collections/:slug"), + shows: PageResolver.forResource("collections/:slug/shows") + }, + canLoad: [AuthGuard.forPermissions("read")], + canActivate: [AuthGuard.forPermissions("read")] + }, + {path: "people/:slug", component: CollectionComponent, + resolve: + { + collection: ItemResolver.forResource("people/:slug"), + shows: PageResolver.forResource("people/:slug/roles") + }, canLoad: [AuthGuard.forPermissions("read")], canActivate: [AuthGuard.forPermissions("read")] }, - - // {path: "people/:people-slug", component: CollectionComponent, resolve: { collection: PeopleResolverService }, canLoad: [AuthGuard.forPermissions("read")], canActivate: [AuthGuard.forPermissions("read")]}, // {path: "watch/:item", component: PlayerComponent, resolve: { item: StreamResolverService }, canLoad: [AuthGuard.forPermissions("play")], canActivate: [AuthGuard.forPermissions("play")]}, // {path: "search/:query", component: SearchComponent, resolve: { items: SearchResolverService }, canLoad: [AuthGuard.forPermissions("read")], canActivate: [AuthGuard.forPermissions("read")]}, + // TODO implement missing pages: /genre, /studio & an home page. {path: "**", component: NotFoundComponent} ]; diff --git a/src/app/components/items-grid/items-grid.component.html b/src/app/components/items-grid/items-grid.component.html index 7f851f9b..e0fc168c 100644 --- a/src/app/components/items-grid/items-grid.component.html +++ b/src/app/components/items-grid/items-grid.component.html @@ -28,7 +28,6 @@

{{item.title}}

-

{{item.startYear}} - {{item.endYear}}

-

{{item.startYear}}

+

{{getDate(item)}}

diff --git a/src/app/components/items-grid/items-grid.component.ts b/src/app/components/items-grid/items-grid.component.ts index 83f38cab..094598ff 100644 --- a/src/app/components/items-grid/items-grid.component.ts +++ b/src/app/components/items-grid/items-grid.component.ts @@ -4,7 +4,7 @@ import {DomSanitizer} from '@angular/platform-browser'; import {ItemType, LibraryItem} from "../../../models/library-item"; import {Page} from "../../../models/page"; import {HttpClient} from "@angular/common/http"; -import {Show} from "../../../models/show"; +import {Show, ShowRole} from "../../../models/show"; @Component({ selector: 'app-items', @@ -13,7 +13,7 @@ import {Show} from "../../../models/show"; }) export class ItemsGridComponent { - @Input() page: Page; + @Input() page: Page; @Input() sortEnabled: boolean = true; sortType: string = "title"; sortKeys: string[] = ["title", "start year", "end year"] @@ -34,7 +34,7 @@ export class ItemsGridComponent return this.sanitizer.bypassSecurityTrustStyle("url(/poster/" + slug + ")"); } - getLink(item: LibraryItem | Show) + getLink(item: LibraryItem | Show | ShowRole) { if ("type" in item && item.type == ItemType.Collection) return "/collection/" + item.slug; @@ -52,4 +52,20 @@ export class ItemsGridComponent this.client.get>(url.toString()) .subscribe(x => this.page = Object.assign(new Page(), x)); } + + getDate(item: LibraryItem | Show | ShowRole): string + { + if ("role" in item && item.role) + { + if ("type" in item && item.type) + return `as ${item.role} (${item.type})`; + return `as ${item.role}`; + } + if ("type" in item && item.type && typeof item.type == "string") + return item.type; + + if (item.endYear && item.startYear != item.endYear) + return `${item.startYear} - ${item.endYear}` + return item.startYear?.toString(); + } } diff --git a/src/app/pages/collection/collection.component.ts b/src/app/pages/collection/collection.component.ts index 526b220d..0f5a5e5d 100644 --- a/src/app/pages/collection/collection.component.ts +++ b/src/app/pages/collection/collection.component.ts @@ -4,7 +4,7 @@ import {ActivatedRoute} from "@angular/router"; import {DomSanitizer} from "@angular/platform-browser"; import {Show} from "../../../models/show"; import {Page} from "../../../models/page"; -import {ShowService} from "../../services/api.service"; +import {People} from "../../../models/people"; @Component({ selector: 'app-collection', @@ -13,15 +13,15 @@ import {ShowService} from "../../services/api.service"; }) export class CollectionComponent { - collection: Collection; + collection: Collection | People; shows: Page; - constructor(private route: ActivatedRoute, private sanitizer: DomSanitizer, private showService: ShowService) + constructor(private route: ActivatedRoute, private sanitizer: DomSanitizer) { this.route.data.subscribe((data) => { this.collection = data.collection; - this.showService.getForCollection(this.collection.slug).subscribe(x => this.shows = x); + this.shows = data.shows; }); } diff --git a/src/models/people.ts b/src/models/people.ts index eec7b335..19faffc7 100644 --- a/src/models/people.ts +++ b/src/models/people.ts @@ -1,11 +1,14 @@ import {ExternalID} from "./external-id"; import {IResource} from "./resources/resource"; +import {Show} from "./show"; export interface People extends IResource { name: string; role: string; - type: string; + type: string; + poster: string; + shows: Show; externalIDs: ExternalID[]; -} +} \ No newline at end of file diff --git a/src/models/show.ts b/src/models/show.ts index df9686dd..6f97b2b7 100644 --- a/src/models/show.ts +++ b/src/models/show.ts @@ -25,3 +25,21 @@ export interface Show extends IResource externalIDs: ExternalID[]; } + +export interface ShowRole extends IResource +{ + role: string; + type: string; + + title: string; + aliases: string[]; + overview: string; + status: string; + trailerUrl: string; + isMovie: boolean; + startYear: number; + endYear : number; + poster: string; + logo: string; + backdrop: string; +} \ No newline at end of file