import { BehaviorSubject, of, Subject, Observable } from 'rxjs'; import { mergeMap } from 'rxjs/operators'; export class FieldSubscriber { private static _createSubject = new BehaviorSubject(undefined); private static _createTrigger = () => FieldSubscriber._createSubject.asObservable(); private static _removeSubject = new BehaviorSubject(undefined); private static _removeTrigger = () => FieldSubscriber._removeSubject.asObservable(); private static _changeSubject = new BehaviorSubject(undefined); private static _changeTrigger = () => FieldSubscriber._changeSubject.asObservable(); private static _sortSubject = new BehaviorSubject(undefined); private static _sortTrigger = () => FieldSubscriber._sortSubject.asObservable(); private static _changeDetector = new BehaviorSubject(undefined); private static _changeDetectorTrigger = () => FieldSubscriber._changeDetector.asObservable(); private static _contactForm = new Subject(); private static _newContactForm = (): Observable => FieldSubscriber._contactForm.asObservable(); static newContactForm(formElement: HTMLElement) { FieldSubscriber._contactForm.next(formElement); } static create(item: any) { FieldSubscriber._createSubject.next(item); } static remove(field: any) { FieldSubscriber._removeSubject.next(field); } static change(options: any, item: any) { FieldSubscriber._changeSubject.next({ options, item }); } static changeDetector(form: any) { FieldSubscriber._changeDetector.next(form); } static sort(orders: any) { FieldSubscriber._sortSubject.next(orders); } static onCreate() { return FieldSubscriber._createTrigger().pipe( mergeMap((value) => { return of(value); }) ); } static onRemove() { return FieldSubscriber._removeTrigger().pipe( mergeMap((value) => { return of(value); }) ); } static onChange() { return FieldSubscriber._changeTrigger().pipe( mergeMap((value) => { return of(value); }) ); } static onChangeDetector() { return FieldSubscriber._changeDetectorTrigger().pipe( mergeMap((value) => { return of(value); }) ); } static onSort() { return FieldSubscriber._sortTrigger().pipe( mergeMap((value) => { return of(value); }) ); } static onContactForm() { return FieldSubscriber._newContactForm().pipe( mergeMap((value) => { return of(value); }) ); } }