diff --git a/webapp/packages/core-administration/src/AdministrationItem/IAdministrationItem.ts b/webapp/packages/core-administration/src/AdministrationItem/IAdministrationItem.ts index 735c10e856..228f4971ec 100644 --- a/webapp/packages/core-administration/src/AdministrationItem/IAdministrationItem.ts +++ b/webapp/packages/core-administration/src/AdministrationItem/IAdministrationItem.ts @@ -8,6 +8,8 @@ import { Style } from '@cloudbeaver/core-theming'; +import { IRouteParams } from '../AdministrationScreen/IRouteParams'; + export enum AdministrationItemType { Default, Administration, @@ -54,6 +56,7 @@ export interface IAdministrationItemSubItem { export interface IConfigurationWizardItemOptions { description: string; + defaultRoute?: IRouteParams; onValidate?: () => Promise | boolean; isDisabled?: () => boolean; isHidden?: () => boolean; diff --git a/webapp/packages/core-administration/src/AdministrationScreen/AdministrationScreenService.ts b/webapp/packages/core-administration/src/AdministrationScreen/AdministrationScreenService.ts index b799fdcd57..06533dbc53 100644 --- a/webapp/packages/core-administration/src/AdministrationScreen/AdministrationScreenService.ts +++ b/webapp/packages/core-administration/src/AdministrationScreen/AdministrationScreenService.ts @@ -14,6 +14,7 @@ import { ScreenService, RouterService } from '@cloudbeaver/core-routing'; import { LocalStorageSaveService } from '@cloudbeaver/core-settings'; import { AdministrationItemService } from '../AdministrationItem/AdministrationItemService'; +import { IRouteParams } from './IRouteParams'; const ADMINISTRATION_ITEMS_STATE = 'administration_items_state'; @@ -77,6 +78,14 @@ export class AdministrationScreenService { } } + navigateTo(item: string, params?: IRouteParams) { + if (!params) { + this.navigateToItem(item); + } else { + this.navigateToItemSub(item, params.sub, params.param); + } + } + navigateToItem(item: string) { if (this.isConfigurationMode) { this.routerService.router.navigate(AdministrationScreenService.setupItemRouteName, { item }); diff --git a/webapp/packages/core-administration/src/AdministrationScreen/AdministrationScreenServiceBootstrap.ts b/webapp/packages/core-administration/src/AdministrationScreen/AdministrationScreenServiceBootstrap.ts index 5fb1ec9c57..b93f5d3477 100644 --- a/webapp/packages/core-administration/src/AdministrationScreen/AdministrationScreenServiceBootstrap.ts +++ b/webapp/packages/core-administration/src/AdministrationScreen/AdministrationScreenServiceBootstrap.ts @@ -85,13 +85,22 @@ export class AdministrationScreenServiceBootstrap extends Bootstrap { ], component: ConfigurationWizardScreen, onActivate: this.handleActivate.bind(this), + onDeactivate: this.handleDeactivate.bind(this), }); } async load() { - const config = await this.serverConfigResource.load(null); + await this.serverConfigResource.load(null); - if (config?.configurationMode && !this.screenService.isActive(AdministrationScreenService.setupName)) { + if (this.administrationScreenService.isConfigurationMode + && !this.screenService.isActive(AdministrationScreenService.setupName)) { + this.administrationScreenService.navigateToRoot(); + } + } + + private async handleDeactivate() { + if (this.administrationScreenService.isConfigurationMode + && !this.screenService.isActive(AdministrationScreenService.setupName)) { this.administrationScreenService.navigateToRoot(); } } diff --git a/webapp/packages/core-administration/src/AdministrationScreen/ConfigurationWizard/ConfigurationWizardScreen.tsx b/webapp/packages/core-administration/src/AdministrationScreen/ConfigurationWizard/ConfigurationWizardScreen.tsx index d02d684315..9766b3b8f6 100644 --- a/webapp/packages/core-administration/src/AdministrationScreen/ConfigurationWizard/ConfigurationWizardScreen.tsx +++ b/webapp/packages/core-administration/src/AdministrationScreen/ConfigurationWizard/ConfigurationWizardScreen.tsx @@ -14,19 +14,24 @@ import { Translate } from '@cloudbeaver/core-localization'; import { usePermission } from '@cloudbeaver/core-root'; import { Administration } from '../../Administration/Administration'; +import { AdministrationItemService } from '../../AdministrationItem/AdministrationItemService'; import { EAdminPermission } from '../../EAdminPermission'; import { AdministrationScreenService } from '../AdministrationScreenService'; import { WizardStepper } from './WizardStepper'; import { WizardTopAppBar } from './WizardTopAppBar/WizardTopAppBar'; export const ConfigurationWizardScreen = observer(function ConfigurationWizardScreen() { + const administrationItemService = useService(AdministrationItemService); const administrationScreenService = useService(AdministrationScreenService); if (!usePermission(EAdminPermission.admin)) { return ; } const handleSelect = useCallback( - (item: string) => administrationScreenService.navigateToItem(item), + (item: string) => { + const route = administrationItemService.getItem(item, true)?.configurationWizardOptions?.defaultRoute; + administrationScreenService.navigateTo(item, route); + }, [administrationScreenService] ); diff --git a/webapp/packages/core-administration/src/AdministrationScreen/ConfigurationWizard/ConfigurationWizardService.ts b/webapp/packages/core-administration/src/AdministrationScreen/ConfigurationWizard/ConfigurationWizardService.ts index 38daf0e41b..3c2d3025ab 100644 --- a/webapp/packages/core-administration/src/AdministrationScreen/ConfigurationWizard/ConfigurationWizardService.ts +++ b/webapp/packages/core-administration/src/AdministrationScreen/ConfigurationWizard/ConfigurationWizardService.ts @@ -130,7 +130,10 @@ export class ConfigurationWizardService { if (this.currentStepIndex + 1 < this.steps.length) { if (this.nextStep) { - this.administrationScreenService.navigateToItem(this.nextStep.name); + this.administrationScreenService.navigateTo( + this.nextStep.name, + this.nextStep.configurationWizardOptions?.defaultRoute + ); } } else { await this.finish(); @@ -143,7 +146,8 @@ export class ConfigurationWizardService { } if (this.currentStepIndex - 1 >= 0) { - this.administrationScreenService.navigateToItem(this.steps[this.currentStepIndex - 1].name); + const step = this.steps[this.currentStepIndex - 1]; + this.administrationScreenService.navigateTo(step.name, step.configurationWizardOptions?.defaultRoute); } } diff --git a/webapp/packages/core-administration/src/AdministrationScreen/IRouteParams.ts b/webapp/packages/core-administration/src/AdministrationScreen/IRouteParams.ts new file mode 100644 index 0000000000..9550a92ebe --- /dev/null +++ b/webapp/packages/core-administration/src/AdministrationScreen/IRouteParams.ts @@ -0,0 +1,12 @@ +/* + * cloudbeaver - Cloud Database Manager + * Copyright (C) 2020 DBeaver Corp and others + * + * Licensed under the Apache License, Version 2.0. + * you may not use this file except in compliance with the License. + */ + +export interface IRouteParams { + sub: string; + param?: string; +}