Browse Source

Another angular fix.

pull/566/head
Sebastian 5 years ago
parent
commit
aee35c61fb
  1. 32
      frontend/app/framework/angular/forms/confirm-click.directive.ts
  2. 31
      frontend/app/shared/components/pipes.ts

32
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<T> extends EventEmitter<T> {
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 {

31
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);

Loading…
Cancel
Save