From 0eeffb405f6150e4729b7d01d61638cffc437fa1 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 20 Nov 2020 12:42:03 +0300 Subject: [PATCH 1/4] feat: create SUPPRESS_UNSAVED_CHANGES_WARNING token #4444 --- npm/ng-packs/packages/theme-shared/src/lib/tokens/index.ts | 1 + .../src/lib/tokens/suppress-unsaved-changes-warning.token.ts | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 npm/ng-packs/packages/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tokens/index.ts b/npm/ng-packs/packages/theme-shared/src/lib/tokens/index.ts index a923c8fc23..18a2aac2f6 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tokens/index.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tokens/index.ts @@ -1,3 +1,4 @@ export * from './append-content.token'; export * from './http-error.token'; export * from './lazy-styles.token'; +export * from './suppress-unsaved-changes-warning.token'; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts b/npm/ng-packs/packages/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts new file mode 100644 index 0000000000..b76a18706c --- /dev/null +++ b/npm/ng-packs/packages/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts @@ -0,0 +1,5 @@ +import { InjectionToken } from '@angular/core'; + +export const SUPPRESS_UNSAVED_CHANGES_WARNING = new InjectionToken( + 'SUPPRESS_UNSAVED_CHANGES_WARNING', +); From b5f8cae0b87066e75015cff5643d84c670021a2f Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 20 Nov 2020 12:42:18 +0300 Subject: [PATCH 2/4] feat: add suppressUnsavedChangesWarning input to modal component #4444 --- .../lib/components/modal/modal.component.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts index b16b2bb14c..c476bd8dd3 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts @@ -4,8 +4,11 @@ import { ContentChild, ElementRef, EventEmitter, + Inject, Input, OnDestroy, + OnInit, + Optional, Output, Renderer2, TemplateRef, @@ -18,6 +21,7 @@ import { fadeAnimation } from '../../animations/modal.animations'; import { Confirmation } from '../../models/confirmation'; import { ConfirmationService } from '../../services/confirmation.service'; import { ModalService } from '../../services/modal.service'; +import { SUPPRESS_UNSAVED_CHANGES_WARNING } from '../../tokens/suppress-unsaved-changes-warning.token'; import { ButtonComponent } from '../button/button.component'; export type ModalSize = 'sm' | 'md' | 'lg' | 'xl'; @@ -29,7 +33,7 @@ export type ModalSize = 'sm' | 'md' | 'lg' | 'xl'; styleUrls: ['./modal.component.scss'], providers: [ModalService, SubscriptionService], }) -export class ModalComponent implements OnDestroy { +export class ModalComponent implements OnDestroy, OnInit { @Input() get visible(): boolean { return this._visible; @@ -57,6 +61,8 @@ export class ModalComponent implements OnDestroy { @Input() size: ModalSize = 'lg'; + @Input() suppressUnsavedChangesWarning: boolean; + @ContentChild(ButtonComponent, { static: false, read: ButtonComponent }) abpSubmit: ButtonComponent; @@ -104,6 +110,9 @@ export class ModalComponent implements OnDestroy { private confirmationService: ConfirmationService, private modalService: ModalService, private subscription: SubscriptionService, + @Optional() + @Inject(SUPPRESS_UNSAVED_CHANGES_WARNING) + private suppressUnsavedChangesWarningToken: boolean, ) { this.initToggleStream(); } @@ -132,6 +141,12 @@ export class ModalComponent implements OnDestroy { } } + ngOnInit() { + if (typeof this.suppressUnsavedChangesWarning === 'undefined') { + this.suppressUnsavedChangesWarning = this.suppressUnsavedChangesWarningToken; + } + } + ngOnDestroy(): void { this.destroy$.next(); } @@ -139,7 +154,7 @@ export class ModalComponent implements OnDestroy { close() { if (this.busy) return; - if (this.isFormDirty) { + if (this.isFormDirty && !this.suppressUnsavedChangesWarning) { if (this.isConfirmationOpen) return; this.isConfirmationOpen = true; From 82c87b1ed961d0cf615eaafb3eb49014a142cbf6 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 20 Nov 2020 13:48:29 +0300 Subject: [PATCH 3/4] refactor: improve code quality --- .../src/lib/components/modal/modal.component.ts | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts index c476bd8dd3..b1fbef79be 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/modal/modal.component.ts @@ -7,7 +7,6 @@ import { Inject, Input, OnDestroy, - OnInit, Optional, Output, Renderer2, @@ -33,7 +32,7 @@ export type ModalSize = 'sm' | 'md' | 'lg' | 'xl'; styleUrls: ['./modal.component.scss'], providers: [ModalService, SubscriptionService], }) -export class ModalComponent implements OnDestroy, OnInit { +export class ModalComponent implements OnDestroy { @Input() get visible(): boolean { return this._visible; @@ -61,7 +60,7 @@ export class ModalComponent implements OnDestroy, OnInit { @Input() size: ModalSize = 'lg'; - @Input() suppressUnsavedChangesWarning: boolean; + @Input() suppressUnsavedChangesWarning = this.suppressUnsavedChangesWarningToken; @ContentChild(ButtonComponent, { static: false, read: ButtonComponent }) abpSubmit: ButtonComponent; @@ -141,12 +140,6 @@ export class ModalComponent implements OnDestroy, OnInit { } } - ngOnInit() { - if (typeof this.suppressUnsavedChangesWarning === 'undefined') { - this.suppressUnsavedChangesWarning = this.suppressUnsavedChangesWarningToken; - } - } - ngOnDestroy(): void { this.destroy$.next(); } From 161b989abcbae90e11af0a37dd40abe315e20809 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 20 Nov 2020 13:48:39 +0300 Subject: [PATCH 4/4] chore: add a todo comment --- .../src/lib/tokens/suppress-unsaved-changes-warning.token.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts b/npm/ng-packs/packages/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts index b76a18706c..af68c8130c 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tokens/suppress-unsaved-changes-warning.token.ts @@ -1,5 +1,6 @@ import { InjectionToken } from '@angular/core'; +// TODO: Should be documented export const SUPPRESS_UNSAVED_CHANGES_WARNING = new InjectionToken( 'SUPPRESS_UNSAVED_CHANGES_WARNING', );