core-api/routing: only require args in link call if routeRef has params
This commit is contained in:
@@ -27,7 +27,7 @@ type SubRouteConfig = {
|
||||
path: string;
|
||||
};
|
||||
|
||||
export class SubRouteRef<T extends { [name in string]: string }>
|
||||
export class SubRouteRef<T extends { [name in string]: string } | never = never>
|
||||
implements ReferencedRoute {
|
||||
constructor(
|
||||
private readonly parent: ConcreteRoute,
|
||||
@@ -38,11 +38,11 @@ export class SubRouteRef<T extends { [name in string]: string }>
|
||||
return this;
|
||||
}
|
||||
|
||||
link(params: T): ConcreteRoute {
|
||||
link<Args extends T extends never ? [] : [T]>(...args: Args): ConcreteRoute {
|
||||
return {
|
||||
[routeReference]: this,
|
||||
[resolveRoute]: (path: string) => {
|
||||
const ownPart = generatePath(this.config.path, params);
|
||||
const ownPart = generatePath(this.config.path, args[0] ?? {});
|
||||
const parentPart = this.parent[resolveRoute](path);
|
||||
return parentPart + ownPart;
|
||||
},
|
||||
@@ -66,7 +66,7 @@ export class AbsoluteRouteRef implements ConcreteRoute {
|
||||
return this.config.title;
|
||||
}
|
||||
|
||||
createSubRoute<T extends { [name in string]: string }>(
|
||||
createSubRoute<T extends { [name in string]: string } | never = never>(
|
||||
config: SubRouteConfig,
|
||||
) {
|
||||
return new SubRouteRef<T>(this, config);
|
||||
|
||||
@@ -75,12 +75,10 @@ describe('RouteRefRegistry', () => {
|
||||
|
||||
expect(registry.resolveRoute([], [ref1])).toBe('/1');
|
||||
expect(registry.resolveRoute([], [ref2])).toBe('/2');
|
||||
expect(registry.resolveRoute([], [ref2a.link({}), ref1])).toBe('/2/a/1');
|
||||
expect(registry.resolveRoute([], [ref2a.link({}), ref2])).toBe('/2/a/2');
|
||||
expect(registry.resolveRoute([ref2a.link({})], [ref2])).toBe('/2/a/2');
|
||||
expect(registry.resolveRoute([ref2a.link({}), ref1], [ref2])).toBe(
|
||||
'/2/a/2',
|
||||
);
|
||||
expect(registry.resolveRoute([], [ref2a.link(), ref1])).toBe('/2/a/1');
|
||||
expect(registry.resolveRoute([], [ref2a.link(), ref2])).toBe('/2/a/2');
|
||||
expect(registry.resolveRoute([ref2a.link()], [ref2])).toBe('/2/a/2');
|
||||
expect(registry.resolveRoute([ref2a.link(), ref1], [ref2])).toBe('/2/a/2');
|
||||
expect(registry.resolveRoute([], [ref2b.link({ id: 'abc' }), ref1])).toBe(
|
||||
'/2/b/abc/1',
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user