mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-07-09 03:04:20 -04:00
Adding a /genre route (still need polish)
This commit is contained in:
parent
52797d869c
commit
530338aa94
@ -35,6 +35,12 @@ const routes: Routes = [
|
|||||||
canActivate: [AuthGuard.forPermissions("read")]
|
canActivate: [AuthGuard.forPermissions("read")]
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{path: "genre/:slug", component: ItemsGridComponent, pathMatch: "full",
|
||||||
|
resolve: {items: PageResolver.forResource<LibraryItem>("shows", ["genres", "studio"], "genres=ctn::slug")},
|
||||||
|
canLoad: [AuthGuard.forPermissions("read")],
|
||||||
|
canActivate: [AuthGuard.forPermissions("read")]
|
||||||
|
},
|
||||||
|
|
||||||
{path: "show/:slug", component: ShowDetailsComponent,
|
{path: "show/:slug", component: ShowDetailsComponent,
|
||||||
resolve: {show: ItemResolver.forResource<Show>("shows/:slug")},
|
resolve: {show: ItemResolver.forResource<Show>("shows/:slug")},
|
||||||
canLoad: [AuthGuard.forPermissions("read")],
|
canLoad: [AuthGuard.forPermissions("read")],
|
||||||
|
@ -58,10 +58,12 @@ export class ItemsGridComponent implements OnInit
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
static routeMapper(route: ActivatedRouteSnapshot, endpoint: string): string
|
static routeMapper(route: ActivatedRouteSnapshot, endpoint: string, query: [string, string][]): string
|
||||||
{
|
{
|
||||||
const filter: string[] = ["genres", "studio"];
|
const filter: string[] = ["genres", "studio"];
|
||||||
let queryParams: [string, string][] = Object.entries(route.queryParams).filter(x => filter.includes(x[0]));
|
let queryParams: [string, string][] = Object.entries(route.queryParams).filter(x => filter.includes(x[0]));
|
||||||
|
if (query)
|
||||||
|
queryParams.push(...query)
|
||||||
if (queryParams.length > 0)
|
if (queryParams.length > 0)
|
||||||
endpoint = "shows";
|
endpoint = "shows";
|
||||||
|
|
||||||
|
@ -7,14 +7,16 @@ import {catchError, map} from 'rxjs/operators';
|
|||||||
import {Page} from "../../models/page";
|
import {Page} from "../../models/page";
|
||||||
import {IResource} from "../../models/resources/resource";
|
import {IResource} from "../../models/resources/resource";
|
||||||
|
|
||||||
type RouteMapper = (route: ActivatedRouteSnapshot, endpoint: string) => string;
|
type RouteMapper = (route: ActivatedRouteSnapshot, endpoint: string, queryParams: [string, string][]) => string;
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class PageResolver
|
export class PageResolver
|
||||||
{
|
{
|
||||||
public static resolvers: any[] = [];
|
public static resolvers: any[] = [];
|
||||||
|
|
||||||
static forResource<T extends IResource>(resource: string, copyParams: boolean | string[] | RouteMapper = false)
|
static forResource<T extends IResource>(resource: string,
|
||||||
|
copyParams: boolean | string[] | RouteMapper = false,
|
||||||
|
defaultQuery: string = null)
|
||||||
{
|
{
|
||||||
@Injectable()
|
@Injectable()
|
||||||
class Resolver implements Resolve<Page<T>>
|
class Resolver implements Resolve<Page<T>>
|
||||||
@ -25,17 +27,23 @@ export class PageResolver
|
|||||||
|
|
||||||
resolve(route: ActivatedRouteSnapshot): Page<T> | Observable<Page<T>> | Promise<Page<T>>
|
resolve(route: ActivatedRouteSnapshot): Page<T> | Observable<Page<T>> | Promise<Page<T>>
|
||||||
{
|
{
|
||||||
let res: string = resource.replace(/:(.*?)(\/|$)/, (x, y) => `${route.paramMap.get(y)}/`);
|
let res: string = resource.replace(/:([^:]*?)(\/|$|&)/, (x, y, z) => `${route.paramMap.get(y)}${z}`);
|
||||||
|
let query: [string, string][] = defaultQuery
|
||||||
|
?.replace(/:([^:]*?)(\/|$|&)/, (x, y, z) => `${route.paramMap.get(y)}${z}`)
|
||||||
|
.split('&')
|
||||||
|
.map(x => x.split('=') as [string, string]);
|
||||||
let uri: string;
|
let uri: string;
|
||||||
if (typeof copyParams == "function")
|
if (typeof copyParams == "function")
|
||||||
uri = copyParams(route, res);
|
uri = copyParams(route, res, query);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
let queryParams: [string, string][] = copyParams == true
|
let entries: [string, string][] = copyParams == true
|
||||||
? Object.entries(route.queryParams)
|
? Object.entries(route.queryParams)
|
||||||
: Object.entries(route.queryParams).filter(x => copyParams && copyParams.includes(x[0]));
|
: Object.entries(route.queryParams).filter(x => copyParams && copyParams.includes(x[0]));
|
||||||
let params: string = queryParams.length > 0
|
if (query)
|
||||||
? '?' + queryParams.map(x => `${x[0]}=${x[1]}`).join('&')
|
entries.push(...query);
|
||||||
|
let params: string = entries.length > 0
|
||||||
|
? '?' + entries.map(x => `${x[0]}=${x[1]}`).join('&')
|
||||||
: "";
|
: "";
|
||||||
uri = `api/${res}${params}`;
|
uri = `api/${res}${params}`;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user