Implement state recovery, make ask before reload opt-in

This commit is contained in:
Kristóf Tóth 2018-07-20 09:24:28 +02:00
parent 362804f54d
commit bc50d52f4d
3 changed files with 16 additions and 5 deletions

View File

@ -17,10 +17,12 @@ export class AppComponent implements OnInit {
ngOnInit() { ngOnInit() {
this.titleService.setTitle(this.documentTitle); this.titleService.setTitle(this.documentTitle);
window.addEventListener('beforeunload', (event) => { if (config.dashboard.askReloadSite) {
const confirmationMessage = 'Refreshing this page may mess up your challenge/tutorial state. Are you sure?'; window.addEventListener('beforeunload', (event) => {
event.returnValue = confirmationMessage; const confirmationMessage = 'Refreshing this page may mess up your challenge/tutorial state. Are you sure?';
return confirmationMessage; event.returnValue = confirmationMessage;
}); return confirmationMessage;
});
}
} }
} }

View File

@ -6,6 +6,8 @@ export const config = {
dashboard: { dashboard: {
route: 'dashboard', route: 'dashboard',
triggerFirstFSMStep: 'step_1', triggerFirstFSMStep: 'step_1',
askReloadSite: false,
recoverAfterPageReload: true,
terminalOrConsole: 'terminal', terminalOrConsole: 'terminal',
currentLayout: 'terminal-ide-web', currentLayout: 'terminal-ide-web',
enabledLayouts: [ enabledLayouts: [

View File

@ -44,6 +44,7 @@ export class DashboardComponent implements OnInit, OnDestroy {
this.initCommandHandling(); this.initCommandHandling();
this.initDeploymentNotifications(); this.initDeploymentNotifications();
this.triggerFirstFSMStepIfNeeded(); this.triggerFirstFSMStepIfNeeded();
this.recoverIfNeeded();
} }
initCommandHandling() { initCommandHandling() {
@ -74,6 +75,12 @@ export class DashboardComponent implements OnInit, OnDestroy {
} }
} }
recoverIfNeeded() {
if (config.dashboard.recoverAfterPageReload) {
setTimeout(() => this.webSocketService.sendJSON({'key': 'recover'}));
}
}
layoutHandler(data: LayoutCommand) { layoutHandler(data: LayoutCommand) {
if (config.dashboard.enabledLayouts.includes(data.value)) { if (config.dashboard.enabledLayouts.includes(data.value)) {
this.setLayout(data.value); this.setLayout(data.value);