mirror of
				https://github.com/zoriya/Kyoo.git
				synced 2025-10-31 02:27:11 -04:00 
			
		
		
		
	Adding the people page
This commit is contained in:
		
							parent
							
								
									964d170ac8
								
							
						
					
					
						commit
						cee5b62469
					
				| @ -18,6 +18,7 @@ import {Show} from "../models/show"; | |||||||
| import {ItemResolver} from "./services/resolvers/item-resolver.service"; | import {ItemResolver} from "./services/resolvers/item-resolver.service"; | ||||||
| import {CollectionComponent} from "./pages/collection/collection.component"; | import {CollectionComponent} from "./pages/collection/collection.component"; | ||||||
| import {Collection} from "../models/collection"; | import {Collection} from "../models/collection"; | ||||||
|  | import {People} from "../models/people"; | ||||||
| 
 | 
 | ||||||
| const routes: Routes = [ | const routes: Routes = [ | ||||||
| 	{path: "browse", component: ItemsGridComponent, pathMatch: "full", | 	{path: "browse", component: ItemsGridComponent, pathMatch: "full", | ||||||
| @ -37,14 +38,26 @@ const routes: Routes = [ | |||||||
| 		canActivate: [AuthGuard.forPermissions("read")] | 		canActivate: [AuthGuard.forPermissions("read")] | ||||||
| 	}, | 	}, | ||||||
| 	{path: "collection/:slug", component: CollectionComponent, | 	{path: "collection/:slug", component: CollectionComponent, | ||||||
| 		resolve: { collection: ItemResolver.forResource<Collection>("collections/:slug") }, | 		resolve: | ||||||
|  | 		{ | ||||||
|  | 			collection: ItemResolver.forResource<Collection>("collections/:slug"), | ||||||
|  | 			shows: PageResolver.forResource<Show>("collections/:slug/shows") | ||||||
|  | 		}, | ||||||
|  | 		canLoad: [AuthGuard.forPermissions("read")], | ||||||
|  | 		canActivate: [AuthGuard.forPermissions("read")] | ||||||
|  | 	}, | ||||||
|  | 	{path: "people/:slug", component: CollectionComponent, | ||||||
|  | 		resolve: | ||||||
|  | 		{ | ||||||
|  | 			collection: ItemResolver.forResource<Collection>("people/:slug"), | ||||||
|  | 			shows: PageResolver.forResource<Show>("people/:slug/roles") | ||||||
|  | 		}, | ||||||
| 		canLoad: [AuthGuard.forPermissions("read")], | 		canLoad: [AuthGuard.forPermissions("read")], | ||||||
| 		canActivate: [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: "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")]},
 | 	// {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} | 	{path: "**", component: NotFoundComponent} | ||||||
| ]; | ]; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -28,7 +28,6 @@ | |||||||
| 	<a class="show" *ngFor="let item of this.page?.items" [href]="getLink(item)" [routerLink]="getLink(item)"> | 	<a class="show" *ngFor="let item of this.page?.items" [href]="getLink(item)" [routerLink]="getLink(item)"> | ||||||
| 		<div matRipple [style.background-image]="getThumb(item.slug)" > </div> | 		<div matRipple [style.background-image]="getThumb(item.slug)" > </div> | ||||||
| 		<p class="title">{{item.title}}</p> | 		<p class="title">{{item.title}}</p> | ||||||
| 		<p class="date" *ngIf="item.endYear && item.startYear != item.endYear; else elseBlock">{{item.startYear}} - {{item.endYear}}</p> | 		<p class="date">{{getDate(item)}}</p> | ||||||
| 		<ng-template #elseBlock><p class="date">{{item.startYear}}</p></ng-template> |  | ||||||
| 	</a> | 	</a> | ||||||
| </div> | </div> | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ import {DomSanitizer} from '@angular/platform-browser'; | |||||||
| import {ItemType, LibraryItem} from "../../../models/library-item"; | import {ItemType, LibraryItem} from "../../../models/library-item"; | ||||||
| import {Page} from "../../../models/page"; | import {Page} from "../../../models/page"; | ||||||
| import {HttpClient} from "@angular/common/http"; | import {HttpClient} from "@angular/common/http"; | ||||||
| import {Show} from "../../../models/show"; | import {Show, ShowRole} from "../../../models/show"; | ||||||
| 
 | 
 | ||||||
| @Component({ | @Component({ | ||||||
| 	selector: 'app-items', | 	selector: 'app-items', | ||||||
| @ -13,7 +13,7 @@ import {Show} from "../../../models/show"; | |||||||
| }) | }) | ||||||
| export class ItemsGridComponent | export class ItemsGridComponent | ||||||
| { | { | ||||||
| 	@Input() page: Page<LibraryItem | Show>; | 	@Input() page: Page<LibraryItem | Show | ShowRole>; | ||||||
| 	@Input() sortEnabled: boolean = true; | 	@Input() sortEnabled: boolean = true; | ||||||
| 	sortType: string = "title"; | 	sortType: string = "title"; | ||||||
| 	sortKeys: string[] = ["title", "start year", "end year"] | 	sortKeys: string[] = ["title", "start year", "end year"] | ||||||
| @ -34,7 +34,7 @@ export class ItemsGridComponent | |||||||
| 		return this.sanitizer.bypassSecurityTrustStyle("url(/poster/" + slug + ")"); | 		return this.sanitizer.bypassSecurityTrustStyle("url(/poster/" + slug + ")"); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	getLink(item: LibraryItem | Show) | 	getLink(item: LibraryItem | Show | ShowRole) | ||||||
| 	{ | 	{ | ||||||
| 		if ("type" in item && item.type == ItemType.Collection) | 		if ("type" in item && item.type == ItemType.Collection) | ||||||
| 			return "/collection/" + item.slug; | 			return "/collection/" + item.slug; | ||||||
| @ -52,4 +52,20 @@ export class ItemsGridComponent | |||||||
| 		this.client.get<Page<LibraryItem | Show>>(url.toString()) | 		this.client.get<Page<LibraryItem | Show>>(url.toString()) | ||||||
| 			.subscribe(x => this.page = Object.assign(new Page<LibraryItem | Show>(), x)); | 			.subscribe(x => this.page = Object.assign(new Page<LibraryItem | Show>(), 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(); | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ import {ActivatedRoute} from "@angular/router"; | |||||||
| import {DomSanitizer} from "@angular/platform-browser"; | import {DomSanitizer} from "@angular/platform-browser"; | ||||||
| import {Show} from "../../../models/show"; | import {Show} from "../../../models/show"; | ||||||
| import {Page} from "../../../models/page"; | import {Page} from "../../../models/page"; | ||||||
| import {ShowService} from "../../services/api.service"; | import {People} from "../../../models/people"; | ||||||
| 
 | 
 | ||||||
| @Component({ | @Component({ | ||||||
| 	selector: 'app-collection', | 	selector: 'app-collection', | ||||||
| @ -13,15 +13,15 @@ import {ShowService} from "../../services/api.service"; | |||||||
| }) | }) | ||||||
| export class CollectionComponent | export class CollectionComponent | ||||||
| { | { | ||||||
| 	collection: Collection; | 	collection: Collection | People; | ||||||
| 	shows: Page<Show>; | 	shows: Page<Show>; | ||||||
| 
 | 
 | ||||||
| 	constructor(private route: ActivatedRoute, private sanitizer: DomSanitizer, private showService: ShowService) | 	constructor(private route: ActivatedRoute, private sanitizer: DomSanitizer) | ||||||
| 	{ | 	{ | ||||||
| 		this.route.data.subscribe((data) => | 		this.route.data.subscribe((data) => | ||||||
| 		{ | 		{ | ||||||
| 			this.collection = data.collection; | 			this.collection = data.collection; | ||||||
| 			this.showService.getForCollection(this.collection.slug).subscribe(x => this.shows = x); | 			this.shows = data.shows; | ||||||
| 		}); | 		}); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,11 +1,14 @@ | |||||||
| import {ExternalID} from "./external-id"; | import {ExternalID} from "./external-id"; | ||||||
| import {IResource} from "./resources/resource"; | import {IResource} from "./resources/resource"; | ||||||
|  | import {Show} from "./show"; | ||||||
| 
 | 
 | ||||||
| export interface People extends IResource | export interface People extends IResource | ||||||
| { | { | ||||||
| 	name: string; | 	name: string; | ||||||
| 	role: string;  | 	role: string;  | ||||||
| 	type: string; | 	type: string; | ||||||
|  | 	poster: string; | ||||||
| 
 | 
 | ||||||
|  | 	shows: Show; | ||||||
| 	externalIDs: ExternalID[]; | 	externalIDs: ExternalID[]; | ||||||
| } | } | ||||||
| @ -25,3 +25,21 @@ export interface Show extends IResource | |||||||
| 
 | 
 | ||||||
| 	externalIDs: ExternalID[]; | 	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; | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user