Browse Source

refactor(theme-shared): add new confirmation service

pull/2606/head
TheDiaval 7 years ago
parent
commit
5cb651a8bf
  1. 69
      npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts

69
npm/ng-packs/packages/theme-shared/src/lib/services/confirmation.service.ts

@ -1,43 +1,72 @@
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { AbstractToaster } from '../abstracts/toaster';
import { Confirmation } from '../models/confirmation'; import { Confirmation } from '../models/confirmation';
import { MessageService } from 'primeng/components/common/messageservice'; import { fromEvent, Observable, Subject, ReplaySubject } from 'rxjs';
import { fromEvent, Observable, Subject } from 'rxjs';
import { takeUntil, debounceTime, filter } from 'rxjs/operators'; import { takeUntil, debounceTime, filter } from 'rxjs/operators';
import { Toaster } from '../models/toaster'; import { Toaster } from '../models/toaster';
import { Config } from '@abp/ng.core';
@Injectable({ providedIn: 'root' }) @Injectable({ providedIn: 'root' })
export class ConfirmationService extends AbstractToaster<Confirmation.Options> { export class ConfirmationService {
key = 'abpConfirmation'; status$: Subject<Confirmation.Status> | Subject<Toaster.Status>;
confirmation$ = new ReplaySubject<Confirmation.DialogData>(1);
sticky = true; info(
message: Config.LocalizationParam,
title: Config.LocalizationParam,
options?: Partial<Confirmation.Options>,
): Observable<Confirmation.Status> | Observable<Toaster.Status> {
return this.show(message, title, 'info', options);
}
destroy$ = new Subject(); success(
message: Config.LocalizationParam,
title: Config.LocalizationParam,
options?: Partial<Confirmation.Options>,
): Observable<Confirmation.Status> | Observable<Toaster.Status> {
return this.show(message, title, 'success', options);
}
constructor(protected messageService: MessageService) { warn(
super(messageService); message: Config.LocalizationParam,
title: Config.LocalizationParam,
options?: Partial<Confirmation.Options>,
): Observable<Confirmation.Status> | Observable<Toaster.Status> {
return this.show(message, title, 'warning', options);
}
error(
message: Config.LocalizationParam,
title: Config.LocalizationParam,
options?: Partial<Confirmation.Options>,
): Observable<Confirmation.Status> | Observable<Toaster.Status> {
return this.show(message, title, 'error', options);
} }
show( show(
message: string, message: Config.LocalizationParam,
title: string, title: Config.LocalizationParam,
severity: Toaster.Severity, severity?: Toaster.Severity,
options?: Confirmation.Options, options?: Partial<Confirmation.Options>,
): Observable<Toaster.Status> { ): Observable<Confirmation.Status> | Observable<Toaster.Status> {
this.listenToEscape(); this.listenToEscape();
return super.show(message, title, severity, options); this.confirmation$.next({
message,
title: title || 'AbpUi:AreYouSure',
severity: severity || 'neutral',
options,
});
this.status$ = new Subject();
return this.status$;
} }
clear(status?: Toaster.Status) { clear(status?: Toaster.Status | Confirmation.Status) {
super.clear(status); this.status$.next(status || Confirmation.Status.dismiss);
this.destroy$.next();
} }
listenToEscape() { listenToEscape() {
fromEvent(document, 'keyup') fromEvent(document, 'keyup')
.pipe( .pipe(
takeUntil(this.destroy$), takeUntil(this.status$),
debounceTime(150), debounceTime(150),
filter((key: KeyboardEvent) => key && key.key === 'Escape'), filter((key: KeyboardEvent) => key && key.key === 'Escape'),
) )

Loading…
Cancel
Save