From b8979f860adb322e33c585b7009b5859743a2d7e Mon Sep 17 00:00:00 2001 From: Sebastian Date: Fri, 28 Aug 2020 19:00:26 +0200 Subject: [PATCH] Confirm click fix. --- .../angular/forms/confirm-click.directive.ts | 43 +++++++------------ 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/frontend/app/framework/angular/forms/confirm-click.directive.ts b/frontend/app/framework/angular/forms/confirm-click.directive.ts index 7f1c71844..6e0d37095 100644 --- a/frontend/app/framework/angular/forms/confirm-click.directive.ts +++ b/frontend/app/framework/angular/forms/confirm-click.directive.ts @@ -7,16 +7,15 @@ // tslint:disable: readonly-array -import { Directive, EventEmitter, HostListener, Input, OnDestroy, Output } from '@angular/core'; +import { Directive, EventEmitter, HostListener, Input, Output } from '@angular/core'; import { DialogService } from '@app/framework/internal'; +import { Subscriber } from 'rxjs'; +import { take } from 'rxjs/operators'; @Directive({ selector: '[sqxConfirmClick]' }) -export class ConfirmClickDirective implements OnDestroy { - private isOpen = false; - private isDestroyed = false; - +export class ConfirmClickDirective { @Input() public confirmTitle: string; @@ -37,14 +36,6 @@ export class ConfirmClickDirective implements OnDestroy { ) { } - public ngOnDestroy() { - this.isDestroyed = true; - - if (!this.isOpen) { - this.clickConfirmed.complete(); - } - } - @HostListener('click', ['$event']) public onClick(event: Event) { if (this.confirmRequired && @@ -53,25 +44,23 @@ export class ConfirmClickDirective implements OnDestroy { this.confirmText && this.confirmText.length > 0) { - this.isOpen = true; + const observers = [...this.clickConfirmed.observers]; this.beforeClick.emit(); - const subscription = - this.dialogs.confirm(this.confirmTitle, this.confirmText) - .subscribe(confirmed => { - this.isOpen = false; - - if (confirmed) { - this.clickConfirmed.emit(); - } - - subscription.unsubscribe(); + this.dialogs.confirm(this.confirmTitle, this.confirmText).pipe(take(1)) + .subscribe(confirmed => { + if (confirmed) { + for (const observer of observers) { + const subscriber = observer as Subscriber; - if (this.isDestroyed) { - this.clickConfirmed.complete(); + if (subscriber['destination']) { + subscriber['destination'].next!(true); + subscriber['destination'].complete!(); + } } - }); + } + }); } else { this.clickConfirmed.emit(); }