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 { AbstractToaster } from '../abstracts/toaster';
import { Confirmation } from '../models/confirmation';
import { MessageService } from 'primeng/components/common/messageservice';
import { fromEvent, Observable, Subject } from 'rxjs';
import { fromEvent, Observable, Subject, ReplaySubject } from 'rxjs';
import { takeUntil, debounceTime, filter } from 'rxjs/operators';
import { Toaster } from '../models/toaster';
import { Config } from '@abp/ng.core';
@Injectable({ providedIn: 'root' })
export class ConfirmationService extends AbstractToaster<Confirmation.Options> {
key = 'abpConfirmation';
export class ConfirmationService {
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) {
super(messageService);
warn(
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(
message: string,
title: string,
severity: Toaster.Severity,
options?: Confirmation.Options,
): Observable<Toaster.Status> {
message: Config.LocalizationParam,
title: Config.LocalizationParam,
severity?: Toaster.Severity,
options?: Partial<Confirmation.Options>,
): Observable<Confirmation.Status> | Observable<Toaster.Status> {
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) {
super.clear(status);
this.destroy$.next();
clear(status?: Toaster.Status | Confirmation.Status) {
this.status$.next(status || Confirmation.Status.dismiss);
}
listenToEscape() {
fromEvent(document, 'keyup')
.pipe(
takeUntil(this.destroy$),
takeUntil(this.status$),
debounceTime(150),
filter((key: KeyboardEvent) => key && key.key === 'Escape'),
)

Loading…
Cancel
Save