diff --git a/webapp/packages/plugin-administration/src/ConfigurationWizard/ConfigurationWizardPagesBootstrapService.ts b/webapp/packages/plugin-administration/src/ConfigurationWizard/ConfigurationWizardPagesBootstrapService.ts index 9aeef61533..f0a2c1934b 100644 --- a/webapp/packages/plugin-administration/src/ConfigurationWizard/ConfigurationWizardPagesBootstrapService.ts +++ b/webapp/packages/plugin-administration/src/ConfigurationWizard/ConfigurationWizardPagesBootstrapService.ts @@ -39,7 +39,7 @@ export class ConfigurationWizardPagesBootstrapService extends Bootstrap { getDrawerComponent: () => WelcomeDrawerItem, }); this.administrationItemService.create({ - name: 'configuration', + name: this.serverConfigurationService.routeName, type: AdministrationItemType.Default, configurationWizardOptions: { description: 'administration_configuration_wizard_configuration_step_description', @@ -57,7 +57,7 @@ export class ConfigurationWizardPagesBootstrapService extends Bootstrap { }, order: 4, onActivate: () => this.serverConfigurationService.loadConfig(), - onDeActivate: () => this.serverConfigurationService.deactivate(), + onDeActivate: this.serverConfigurationService.deactivate.bind(this.serverConfigurationService), onLoad: this.serverConfigurationService.loadConfig.bind(this.serverConfigurationService, false), getContentComponent: () => ServerConfigurationPage, getDrawerComponent: () => ServerConfigurationDrawerItem, diff --git a/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/ServerConfigurationService.ts b/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/ServerConfigurationService.ts index 663dfeff6a..dc54f66e61 100644 --- a/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/ServerConfigurationService.ts +++ b/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/ServerConfigurationService.ts @@ -9,10 +9,10 @@ import { observable, makeObservable } from 'mobx'; import { AdministrationScreenService } from '@cloudbeaver/core-administration'; -import { ActionSnackbarProps, PlaceholderContainer } from '@cloudbeaver/core-blocks'; +import { ActionSnackbar, ActionSnackbarProps, PlaceholderContainer } from '@cloudbeaver/core-blocks'; import { DEFAULT_NAVIGATOR_VIEW_SETTINGS } from '@cloudbeaver/core-connections'; import { injectable } from '@cloudbeaver/core-di'; -import { INotification, NotificationService } from '@cloudbeaver/core-events'; +import { ENotificationType, INotification, NotificationService } from '@cloudbeaver/core-events'; import { IExecutor, Executor, IExecutorHandler, ExecutorInterrupter } from '@cloudbeaver/core-executor'; import { ServerConfigResource } from '@cloudbeaver/core-root'; @@ -39,6 +39,7 @@ export class ServerConfigurationService { state: IServerConfigurationPageState; loading: boolean; + readonly routeName: string; readonly loadConfigTask: IExecutor; readonly prepareConfigTask: IExecutor; readonly saveTask: IExecutor; @@ -61,6 +62,7 @@ export class ServerConfigurationService { done: observable, }); + this.routeName = 'configuration'; this.stateLinked = false; this.done = false; this.loading = true; @@ -79,7 +81,7 @@ export class ServerConfigurationService { .addHandler(this.loadServerConfig) .addPostHandler(() => { this.loading = false; - this.showUnsavedNotification(); + this.showUnsavedNotification(false); }); this.saveTask @@ -91,17 +93,21 @@ export class ServerConfigurationService { .addHandler(this.validateForm) .addPostHandler(this.ensureValidation); - this.serverConfigResource.onDataUpdate.addPostHandler(this.showUnsavedNotification.bind(this)); + this.serverConfigResource.onDataUpdate.addPostHandler(this.showUnsavedNotification.bind(this, false)); this.administrationScreenService.activationEvent.addHandler(this.unlinkState.bind(this)); } changed(): void { this.done = false; + + this.showUnsavedNotification(true); } - deactivate(): void { - this.showUnsavedNotification(); + deactivate(configurationWizard: boolean, outside: boolean, outsideAdminPage: boolean): void { + if (!outsideAdminPage) { + this.showUnsavedNotification(false); + } } async loadConfig(reset = false): Promise { @@ -223,7 +229,7 @@ export class ServerConfigurationService { return true; } - private showUnsavedNotification() { + private showUnsavedNotification(close: boolean) { if ( !this.serverConfigResource.isChanged() && !this.serverConfigResource.isNavigatorSettingsChanged() @@ -232,13 +238,17 @@ export class ServerConfigurationService { return; } - if (this.unSaveNotification || this.administrationScreenService.isConfigurationMode) { + if (close || this.unSaveNotification || this.administrationScreenService.isConfigurationMode) { return; } - this.unSaveNotification = this.notificationService.logInfo({ - title: 'administration_configuration_wizard_configuration_server_info_unsaved', - persistent: true, + this.unSaveNotification = this.notificationService.customNotification(() => ActionSnackbar, { + actionText: 'administration_configuration_wizard_configuration_server_info_unsaved_navigate', + onAction: () => this.administrationScreenService.navigateToItem(this.routeName), + }, { + title: 'administration_configuration_wizard_configuration_server_info_unsaved_title', + message: 'administration_configuration_wizard_configuration_server_info_unsaved_message', + type: ENotificationType.Info, onClose: () => { this.unSaveNotification = null; }, }); } @@ -248,6 +258,7 @@ export class ServerConfigurationService { return; } + this.unSaveNotification?.close(true); this.serverConfigResource.unlinkUpdate(); this.stateLinked = false; } diff --git a/webapp/packages/plugin-administration/src/locales/en.ts b/webapp/packages/plugin-administration/src/locales/en.ts index 786fff653c..89eca1736d 100644 --- a/webapp/packages/plugin-administration/src/locales/en.ts +++ b/webapp/packages/plugin-administration/src/locales/en.ts @@ -15,7 +15,9 @@ export default [ ['administration_configuration_wizard_configuration_server_info', 'Server Information'], ['administration_configuration_wizard_configuration_server_name', 'Server Name'], - ['administration_configuration_wizard_configuration_server_info_unsaved', 'You have unsaved changes'], + ['administration_configuration_wizard_configuration_server_info_unsaved_title', 'Unsaved settings'], + ['administration_configuration_wizard_configuration_server_info_unsaved_message', 'Settings can be saved on Server configuration page'], + ['administration_configuration_wizard_configuration_server_info_unsaved_navigate', 'Open'], ['administration_configuration_wizard_configuration_server_session_lifetime', 'Session lifetime'], ['administration_configuration_wizard_configuration_server_session_lifetime_description', 'Here you may specify the number of minutes that you wish the session to be allowed to remain idle before it expires'],