From cd2a7b7e0a611db0b8fa09d6a56c57717ff9aefe Mon Sep 17 00:00:00 2001 From: Wroud Date: Fri, 19 Nov 2021 20:43:25 +0300 Subject: [PATCH] fix: CB-1452 navigation --- .../AdministrationItem/IAdministrationItem.ts | 2 + .../AdministrationScreenService.ts | 68 ++++++++++++------- .../Users/UsersAdministration.tsx | 9 ++- .../UsersAdministrationNavigationService.ts | 2 +- .../Users/UsersAdministrationService.ts | 1 + 5 files changed, 53 insertions(+), 29 deletions(-) diff --git a/webapp/packages/core-administration/src/AdministrationItem/IAdministrationItem.ts b/webapp/packages/core-administration/src/AdministrationItem/IAdministrationItem.ts index 6fe4fb48ce..1a492ca265 100644 --- a/webapp/packages/core-administration/src/AdministrationItem/IAdministrationItem.ts +++ b/webapp/packages/core-administration/src/AdministrationItem/IAdministrationItem.ts @@ -94,6 +94,8 @@ export interface IAdministrationItemOptions { isHidden?: ((configurationWizard: boolean) => boolean) | boolean; isOnlyActive?: ((configurationWizard: boolean) => boolean) | boolean; replace?: IAdministrationItemReplaceOptions; + defaultSub?: string; + defaultParam?: string; getDrawerComponent: () => AdministrationItemDrawerComponent; getContentComponent: () => AdministrationItemContentComponent; onLoad?: AdministrationItemEvent; diff --git a/webapp/packages/core-administration/src/AdministrationScreen/AdministrationScreenService.ts b/webapp/packages/core-administration/src/AdministrationScreen/AdministrationScreenService.ts index 2c9a511296..7f1f998248 100644 --- a/webapp/packages/core-administration/src/AdministrationScreen/AdministrationScreenService.ts +++ b/webapp/packages/core-administration/src/AdministrationScreen/AdministrationScreenService.ts @@ -97,6 +97,32 @@ export class AdministrationScreenService { }); } + getRouteName(item?: string, sub?: string, param?: string) { + if (this.isConfigurationMode) { + if (item) { + if (sub) { + if (param) { + return AdministrationScreenService.setupItemSubParamRouteName; + } + return AdministrationScreenService.setupItemSubRouteName; + } + return AdministrationScreenService.setupItemRouteName; + } + return AdministrationScreenService.setupName; + } else { + if (item) { + if (sub) { + if (param) { + return AdministrationScreenService.itemSubParamRouteName; + } + return AdministrationScreenService.itemSubRouteName; + } + return AdministrationScreenService.itemRouteName; + } + return AdministrationScreenService.screenName; + } + } + getScreen(state?: RouterState): IAdministrationItemRoute | null { if (!state || !this.isAdministrationRouteActive(state.name)) { return null; @@ -106,11 +132,7 @@ export class AdministrationScreenService { } navigateToRoot(): void { - if (this.isConfigurationMode) { - this.screenService.navigateToScreen(AdministrationScreenService.setupName); - } else { - this.screenService.navigateToScreen(AdministrationScreenService.screenName); - } + this.screenService.navigateToScreen(this.getRouteName()); } navigateTo(item: string, params?: IRouteParams): void { @@ -121,28 +143,24 @@ export class AdministrationScreenService { } } - navigateToItem(item: string): void { - if (this.isConfigurationMode) { - this.screenService.navigateToScreen(AdministrationScreenService.setupItemRouteName, item); - } else { - this.screenService.navigateToScreen(AdministrationScreenService.itemRouteName, item); - } + navigateToItem(itemName: string): void { + const item = this.administrationItemService.getItem(itemName, this.isConfigurationMode); + + this.screenService.navigateToScreen( + this.getRouteName(itemName, item?.defaultSub, item?.defaultParam), + itemName, + item?.defaultSub, + item?.defaultParam + ); } - navigateToItemSub(item: string, sub: string, param?: string | null): void { - if (!param) { - if (this.isConfigurationMode) { - this.screenService.navigateToScreen(AdministrationScreenService.setupItemSubRouteName, item, sub); - } else { - this.screenService.navigateToScreen(AdministrationScreenService.itemSubRouteName, item, sub); - } - return; - } - if (this.isConfigurationMode) { - this.screenService.navigateToScreen(AdministrationScreenService.setupItemSubParamRouteName, item, sub, param); - } else { - this.screenService.navigateToScreen(AdministrationScreenService.itemSubParamRouteName, item, sub, param); - } + navigateToItemSub(item: string, sub: string, param?: string): void { + this.screenService.navigateToScreen( + this.getRouteName(item, sub, param), + item, + sub, + param + ); } getItemState(name: string): T | undefined diff --git a/webapp/packages/plugin-authentication-administration/src/Administration/Users/UsersAdministration.tsx b/webapp/packages/plugin-authentication-administration/src/Administration/Users/UsersAdministration.tsx index eee824d525..aceaf560e7 100644 --- a/webapp/packages/plugin-authentication-administration/src/Administration/Users/UsersAdministration.tsx +++ b/webapp/packages/plugin-authentication-administration/src/Administration/Users/UsersAdministration.tsx @@ -48,10 +48,13 @@ export const UsersAdministration: AdministrationItemContentComponent = observer( const style = useStyles(ADMINISTRATION_TOOLS_PANEL_STYLES, tabStyle); function openSub({ tabId }: ITabData) { - if (sub?.name !== tabId) { - param = null; + if (subName === tabId) { + return; } - usersAdministrationNavigationService.navToSub(tabId as EUsersAdministrationSub, param); + + param = null; + + usersAdministrationNavigationService.navToSub(tabId as EUsersAdministrationSub, param || undefined); } return styled(style)( diff --git a/webapp/packages/plugin-authentication-administration/src/Administration/Users/UsersAdministrationNavigationService.ts b/webapp/packages/plugin-authentication-administration/src/Administration/Users/UsersAdministrationNavigationService.ts index be0e0023a2..0aeb452f6b 100644 --- a/webapp/packages/plugin-authentication-administration/src/Administration/Users/UsersAdministrationNavigationService.ts +++ b/webapp/packages/plugin-authentication-administration/src/Administration/Users/UsersAdministrationNavigationService.ts @@ -31,7 +31,7 @@ export class UsersAdministrationNavigationService { this.navToSub(EUsersAdministrationSub.Users, 'create'); } - navToSub(sub: EUsersAdministrationSub, param?: string | null): void { + navToSub(sub: EUsersAdministrationSub, param?: string): void { this.administrationScreenService.navigateToItemSub( UsersAdministrationNavigationService.ItemName, sub, diff --git a/webapp/packages/plugin-authentication-administration/src/Administration/Users/UsersAdministrationService.ts b/webapp/packages/plugin-authentication-administration/src/Administration/Users/UsersAdministrationService.ts index cc8a1bdc17..0d526ecb8b 100644 --- a/webapp/packages/plugin-authentication-administration/src/Administration/Users/UsersAdministrationService.ts +++ b/webapp/packages/plugin-authentication-administration/src/Administration/Users/UsersAdministrationService.ts @@ -57,6 +57,7 @@ export class UsersAdministrationService extends Bootstrap { }, }, ], + defaultSub: EUsersAdministrationSub.Users, getContentComponent: () => UsersAdministration, getDrawerComponent: () => UsersDrawerItem, });