feat(project-editor): warn before leaving with unsaved changes
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import { Routes } from '@angular/router';
|
import { Routes } from '@angular/router';
|
||||||
import { languageGuard } from './guards/language.guard';
|
import { languageGuard } from './guards/language.guard';
|
||||||
|
import { projectEditorDirtyGuard } from './features/project-editor/guards/project-editor-dirty.guard';
|
||||||
import { environment } from '../environments/environment';
|
import { environment } from '../environments/environment';
|
||||||
|
|
||||||
// Core routes (same across all brands)
|
// Core routes (same across all brands)
|
||||||
@@ -41,7 +42,8 @@ const coreRoutes: Routes = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'edit/:section',
|
path: 'edit/:section',
|
||||||
loadComponent: () => import('./features/project-editor/pages/project-editor-page.component').then(m => m.ProjectEditorPageComponent)
|
loadComponent: () => import('./features/project-editor/pages/project-editor-page.component').then(m => m.ProjectEditorPageComponent),
|
||||||
|
canDeactivate: [projectEditorDirtyGuard]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: 'edit',
|
path: 'edit',
|
||||||
|
|||||||
@@ -0,0 +1,12 @@
|
|||||||
|
import { inject } from '@angular/core';
|
||||||
|
import { CanDeactivateFn } from '@angular/router';
|
||||||
|
import { ProjectEditorFacade } from '../facade/project-editor.facade';
|
||||||
|
import { ProjectEditorPageComponent } from '../pages/project-editor-page.component';
|
||||||
|
|
||||||
|
export const projectEditorDirtyGuard: CanDeactivateFn<ProjectEditorPageComponent> = () => {
|
||||||
|
const facade = inject(ProjectEditorFacade);
|
||||||
|
if (!facade.dirty()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return window.confirm('You have unsaved changes. Leave anyway?');
|
||||||
|
};
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
import { ChangeDetectionStrategy, Component, effect, inject } from '@angular/core';
|
import { ChangeDetectionStrategy, Component, HostListener, effect, inject } from '@angular/core';
|
||||||
import { ActivatedRoute } from '@angular/router';
|
import { ActivatedRoute } from '@angular/router';
|
||||||
import { toSignal } from '@angular/core/rxjs-interop';
|
import { toSignal } from '@angular/core/rxjs-interop';
|
||||||
import { map } from 'rxjs/operators';
|
import { map } from 'rxjs/operators';
|
||||||
@@ -68,4 +68,12 @@ export class ProjectEditorPageComponent {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@HostListener('window:beforeunload', ['$event'])
|
||||||
|
warnBeforeUnload(event: BeforeUnloadEvent): void {
|
||||||
|
if (this.facade.dirty()) {
|
||||||
|
event.preventDefault();
|
||||||
|
event.returnValue = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user