chore(plugin-administration): CB-794 unsaved settings notification behavior

This commit is contained in:
Wroud
2021-04-07 10:17:49 +03:00
parent 3b7247aa48
commit b982d43729
3 changed files with 27 additions and 14 deletions
@@ -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,
@@ -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<ILoadConfigData>;
readonly prepareConfigTask: IExecutor<IServerConfigSaveData>;
readonly saveTask: IExecutor<IServerConfigSaveData>;
@@ -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<void> {
@@ -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;
}
@@ -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'],