diff --git a/frontend/app/framework/angular/forms/confirm-click.directive.ts b/frontend/app/framework/angular/forms/confirm-click.directive.ts index e954cae29..7f1c71844 100644 --- a/frontend/app/framework/angular/forms/confirm-click.directive.ts +++ b/frontend/app/framework/angular/forms/confirm-click.directive.ts @@ -10,30 +10,6 @@ import { Directive, EventEmitter, HostListener, Input, OnDestroy, Output } from '@angular/core'; import { DialogService } from '@app/framework/internal'; -class DelayEventEmitter extends EventEmitter { - private delayedNexts: any[] | null = []; - - public delayEmit() { - if (this.delayedNexts) { - for (const callback of this.delayedNexts) { - callback(); - } - } - } - - public clear() { - this.delayedNexts = null; - } - - public subscribe(generatorOrNext?: any, error?: any, complete?: any): any { - if (this.delayedNexts) { - this.delayedNexts.push(generatorOrNext); - } - - return super.subscribe(generatorOrNext, error, complete); - } -} - @Directive({ selector: '[sqxConfirmClick]' }) @@ -54,7 +30,7 @@ export class ConfirmClickDirective implements OnDestroy { public beforeClick = new EventEmitter(); @Output('sqxConfirmClick') - public clickConfirmed = new DelayEventEmitter(); + public clickConfirmed = new EventEmitter(); constructor( private readonly dialogs: DialogService @@ -65,7 +41,7 @@ export class ConfirmClickDirective implements OnDestroy { this.isDestroyed = true; if (!this.isOpen) { - this.clickConfirmed.clear(); + this.clickConfirmed.complete(); } } @@ -87,13 +63,13 @@ export class ConfirmClickDirective implements OnDestroy { this.isOpen = false; if (confirmed) { - this.clickConfirmed.delayEmit(); + this.clickConfirmed.emit(); } subscription.unsubscribe(); if (this.isDestroyed) { - this.clickConfirmed.clear(); + this.clickConfirmed.complete(); } }); } else { diff --git a/frontend/app/shared/components/pipes.ts b/frontend/app/shared/components/pipes.ts index 48c2baf00..ebd838a5b 100644 --- a/frontend/app/shared/components/pipes.ts +++ b/frontend/app/shared/components/pipes.ts @@ -8,13 +8,12 @@ // tslint:disable: no-pipe-impure // tslint:disable: directive-class-suffix -import { ChangeDetectorRef, Directive, OnDestroy, Pipe, PipeTransform } from '@angular/core'; +import { ChangeDetectorRef, OnDestroy, Pipe, PipeTransform } from '@angular/core'; import { ApiUrlConfig, UserDto, UsersProviderService } from '@app/shared/internal'; import { Observable, of, Subscription } from 'rxjs'; import { map } from 'rxjs/operators'; -@Directive() -class UserAsyncPipe implements OnDestroy { +class UserAsyncPipe { private lastUserId: string; private lastValue: string | undefined = undefined; private subscription: Subscription; @@ -27,7 +26,7 @@ class UserAsyncPipe implements OnDestroy { this.lastValue = loading; } - public ngOnDestroy() { + public destroy() { if (this.subscription) { this.subscription.unsubscribe(); } @@ -62,11 +61,15 @@ class UserAsyncPipe implements OnDestroy { name: 'sqxUserName', pure: false }) -export class UserNamePipe extends UserAsyncPipe implements PipeTransform { +export class UserNamePipe extends UserAsyncPipe implements OnDestroy, PipeTransform { constructor(users: UsersProviderService, changeDetector: ChangeDetectorRef) { super('Loading...', users, changeDetector); } + public ngOnDestroy() { + super.destroy(); + } + public transform(userId: string, placeholder = 'Me') { return super.transformInternal(userId, users => users.getUser(userId, placeholder).pipe(map(u => u.displayName))); } @@ -76,11 +79,15 @@ export class UserNamePipe extends UserAsyncPipe implements PipeTransform { name: 'sqxUserNameRef', pure: false }) -export class UserNameRefPipe extends UserAsyncPipe implements PipeTransform { +export class UserNameRefPipe extends UserAsyncPipe implements OnDestroy, PipeTransform { constructor(users: UsersProviderService, changeDetector: ChangeDetectorRef) { super('Loading...', users, changeDetector); } + public ngOnDestroy() { + super.destroy(); + } + public transform(userId: string, placeholder: string | null = 'Me') { return super.transformInternal(userId, users => { const { type, id } = split(userId); @@ -132,13 +139,17 @@ export class UserIdPicturePipe implements PipeTransform { name: 'sqxUserPicture', pure: false }) -export class UserPicturePipe extends UserAsyncPipe implements PipeTransform { +export class UserPicturePipe extends UserAsyncPipe implements OnDestroy, PipeTransform { constructor(users: UsersProviderService, changeDetector: ChangeDetectorRef, private readonly apiUrl: ApiUrlConfig ) { super('', users, changeDetector); } + public ngOnDestroy() { + super.destroy(); + } + public transform(userId: string) { return super.transformInternal(userId, users => users.getUser(userId).pipe(map(u => this.apiUrl.buildUrl(`api/users/${u.id}/picture`)))); } @@ -148,13 +159,17 @@ export class UserPicturePipe extends UserAsyncPipe implements PipeTransform { name: 'sqxUserPictureRef', pure: false }) -export class UserPictureRefPipe extends UserAsyncPipe implements PipeTransform { +export class UserPictureRefPipe extends UserAsyncPipe implements OnDestroy, PipeTransform { constructor(users: UsersProviderService, changeDetector: ChangeDetectorRef, private readonly apiUrl: ApiUrlConfig ) { super('', users, changeDetector); } + public ngOnDestroy() { + super.destroy(); + } + public transform(userId: string) { return super.transformInternal(userId, users => { const { type, id } = split(userId);