Skip to content

Commit 91ced65

Browse files
committed
add navigation resolver
1 parent 8abe295 commit 91ced65

File tree

3 files changed

+27
-15
lines changed

3 files changed

+27
-15
lines changed

projects/fusio-sdk/src/lib/config/config.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {InjectionToken} from "@angular/core";
22
import {UserAccount} from "fusio-sdk/dist/src/generated/consumer/UserAccount";
33
import {Plan} from "fusio-sdk/dist/src/generated/consumer/Plan";
44
import {Message} from "fusio-sdk/dist/src/generated/consumer/Message";
5-
import {GroupItem, Item} from "../service/navigation.service";
5+
import {GroupItem, Items} from "../service/navigation.service";
66

77
export interface Config {
88
baseUrl: string,
@@ -13,9 +13,9 @@ export interface Config {
1313
homePath?: string,
1414
loginPath?: string,
1515
navigation?: Array<GroupItem>,
16-
userNavigation?: Array<Item>,
17-
anonymousNavigation?: Array<Item>,
18-
accountNavigation?: Array<Item>,
16+
userNavigation?: Items,
17+
anonymousNavigation?: Items,
18+
accountNavigation?: Items,
1919
paymentProvider?: string,
2020
paymentCurrency?: string,
2121
recaptcha?: string,

projects/fusio-sdk/src/lib/service/config.service.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
EventListener,
55
FUSIO_CONFIG,
66
} from "../config/config";
7-
import {GroupItem, Item} from "./navigation.service";
7+
import {GroupItem, Items} from "./navigation.service";
88

99
@Injectable({
1010
providedIn: 'root'
@@ -37,7 +37,7 @@ export class ConfigService {
3737
if (this.config.homePath) {
3838
return this.config.homePath;
3939
} else {
40-
return '/backend';
40+
return '/';
4141
}
4242
}
4343

@@ -53,7 +53,7 @@ export class ConfigService {
5353
return this.config.navigation || [];
5454
}
5555

56-
public getUserNavigation(): Array<Item> {
56+
public getUserNavigation(): Items {
5757
return this.config.userNavigation || [{
5858
title: 'Account',
5959
path: '/account'
@@ -63,7 +63,7 @@ export class ConfigService {
6363
}];
6464
}
6565

66-
public getAnonymousNavigation(): Array<Item> {
66+
public getAnonymousNavigation(): Items {
6767
return this.config.anonymousNavigation || [{
6868
title: 'Login',
6969
path: '/login'
@@ -73,7 +73,7 @@ export class ConfigService {
7373
}];
7474
}
7575

76-
public getAccountNavigation(): Array<Item> {
76+
public getAccountNavigation(): Items {
7777
return this.config.accountNavigation || [{
7878
title: 'Account',
7979
path: '/account',

projects/fusio-sdk/src/lib/service/navigation.service.ts

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,21 @@ export class NavigationService {
1515
}
1616

1717
getUserNavigation(): Array<Item> {
18-
return this.checkPermissionsItems(this.config.getUserNavigation());
18+
return this.checkPermissionItems(this.config.getUserNavigation());
1919
}
2020

2121
getAnonymousNavigation(): Array<Item> {
22-
return this.config.getAnonymousNavigation();
22+
return this.checkPermissionItems(this.config.getAnonymousNavigation());
2323
}
2424

2525
getAccountNavigation(): Array<Item> {
26-
return this.checkPermissionsItems(this.config.getAccountNavigation());
26+
return this.checkPermissionItems(this.config.getAccountNavigation());
2727
}
2828

2929
private checkPermissions(navigation: Array<GroupItem>): Array<GroupItem> {
3030
let result = [];
3131
for (let i = 0; i < navigation.length; i++) {
32-
const children = this.checkPermissionsItems(navigation[i].children);
32+
const children = this.checkPermissionItems(navigation[i].children);
3333
if (children.length > 0) {
3434
let menu = navigation[i];
3535
menu.children = children;
@@ -40,7 +40,15 @@ export class NavigationService {
4040
return result;
4141
}
4242

43-
private checkPermissionsItems(items: Array<Item>): Array<Item> {
43+
private checkPermissionItems(items: Items): Array<Item> {
44+
if (items instanceof Function) {
45+
items = items.apply(this);
46+
}
47+
48+
if (!Array.isArray(items)) {
49+
return [];
50+
}
51+
4452
let result = [];
4553
for (let i = 0; i < items.length; i++) {
4654
const scope = items[i].scope;
@@ -59,9 +67,13 @@ export class NavigationService {
5967
export interface GroupItem {
6068
title: string
6169
visible: boolean
62-
children: Array<Item>
70+
children: Items
6371
}
6472

73+
export type ItemResolver = () => Array<Item>;
74+
75+
export type Items = Array<Item>|ItemResolver;
76+
6577
export interface Item {
6678
title: string
6779
icon?: string

0 commit comments

Comments
 (0)