From 8a91cb612162246ff90611ac4d55d65448f368ce Mon Sep 17 00:00:00 2001 From: joaobazzo Date: Mon, 12 May 2025 19:21:40 -0400 Subject: [PATCH] feat(48): 48-solution --- .../src/app/app.routes.ts | 3 +++ .../src/app/pages/join.component.ts | 25 ++++++++++++++++--- .../src/app/ui/dialog.component.ts | 23 +++++++++++------ .../src/app/ui/form.component.ts | 15 ++++++++++- .../48-avoid-losing-form-data/src/styles.scss | 2 ++ 5 files changed, 57 insertions(+), 11 deletions(-) diff --git a/apps/forms/48-avoid-losing-form-data/src/app/app.routes.ts b/apps/forms/48-avoid-losing-form-data/src/app/app.routes.ts index 84be34b9a..e1022760c 100644 --- a/apps/forms/48-avoid-losing-form-data/src/app/app.routes.ts +++ b/apps/forms/48-avoid-losing-form-data/src/app/app.routes.ts @@ -11,6 +11,9 @@ export const appRoutes: Route[] = [ { path: 'form', loadComponent: () => JoinComponent, + canDeactivate: [ + (component: JoinComponent) => component.hasUnsavedChanges(), + ], }, { path: 'page-1', diff --git a/apps/forms/48-avoid-losing-form-data/src/app/pages/join.component.ts b/apps/forms/48-avoid-losing-form-data/src/app/pages/join.component.ts index 51449a7fb..6e00f3d80 100644 --- a/apps/forms/48-avoid-losing-form-data/src/app/pages/join.component.ts +++ b/apps/forms/48-avoid-losing-form-data/src/app/pages/join.component.ts @@ -1,4 +1,7 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { Dialog } from '@angular/cdk/dialog'; +import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; +import { map } from 'rxjs'; +import { AlertDialogComponent } from '../ui/dialog.component'; import { FormComponent } from '../ui/form.component'; @Component({ @@ -6,10 +9,26 @@ import { FormComponent } from '../ui/form.component'; template: `
- +
`, changeDetection: ChangeDetectionStrategy.OnPush, }) -export class JoinComponent {} +export class JoinComponent { + hasValue = false; + dialog = inject(Dialog); + + hasUnsavedChanges() { + if (this.hasValue) { + const dialogRef = this.dialog.open(AlertDialogComponent, { + disableClose: true, + ariaLabel: 'Alert dialog', + ariaDescribedBy: 'alert-description', + }); + return dialogRef.closed.pipe(map((res) => res)); + } else { + return true; + } + } +} diff --git a/apps/forms/48-avoid-losing-form-data/src/app/ui/dialog.component.ts b/apps/forms/48-avoid-losing-form-data/src/app/ui/dialog.component.ts index 661da9bcf..147cb6b77 100644 --- a/apps/forms/48-avoid-losing-form-data/src/app/ui/dialog.component.ts +++ b/apps/forms/48-avoid-losing-form-data/src/app/ui/dialog.component.ts @@ -1,24 +1,31 @@ -import { ChangeDetectionStrategy, Component } from '@angular/core'; +import { DialogRef } from '@angular/cdk/dialog'; +import { ChangeDetectionStrategy, Component, inject } from '@angular/core'; // NOTE : this is just the dialog content, you need to implement dialog logic @Component({ standalone: true, template: ` -