62 lines
2.1 KiB
TypeScript
62 lines
2.1 KiB
TypeScript
|
import {
|
||
|
ApplicationRef,
|
||
|
ComponentFactoryResolver,
|
||
|
Injectable,
|
||
|
Injector,
|
||
|
} from '@angular/core';
|
||
|
import * as jq from 'jquery';
|
||
|
import { first } from 'rxjs/operators';
|
||
|
|
||
|
import { MessagingService } from 'jslib-common/abstractions/messaging.service';
|
||
|
|
||
|
import { ModalRef } from 'jslib-angular/components/modal/modal.ref';
|
||
|
import { ModalService as BaseModalService } from 'jslib-angular/services/modal.service';
|
||
|
|
||
|
import { Utils } from 'jslib-common/misc/utils';
|
||
|
|
||
|
@Injectable()
|
||
|
export class ModalService extends BaseModalService {
|
||
|
el: any = null;
|
||
|
modalOpen: boolean = false;
|
||
|
|
||
|
constructor(componentFactoryResolver: ComponentFactoryResolver, applicationRef: ApplicationRef,
|
||
|
injector: Injector, private messagingService: MessagingService) {
|
||
|
super(componentFactoryResolver, applicationRef, injector);
|
||
|
}
|
||
|
|
||
|
protected setupHandlers(modalRef: ModalRef) {
|
||
|
modalRef.onCreated.pipe(first()).subscribe(() => {
|
||
|
const modals = Array.from(document.querySelectorAll('.modal'));
|
||
|
if (modals.length > 0) {
|
||
|
this.el = jq(modals[0]);
|
||
|
this.el.modal('show');
|
||
|
|
||
|
this.el.on('show.bs.modal', () => {
|
||
|
modalRef.show();
|
||
|
this.messagingService.send('modalShow');
|
||
|
});
|
||
|
this.el.on('shown.bs.modal', () => {
|
||
|
modalRef.shown();
|
||
|
this.messagingService.send('modalShown');
|
||
|
if (!Utils.isMobileBrowser) {
|
||
|
this.el.find('*[appAutoFocus]').focus();
|
||
|
}
|
||
|
});
|
||
|
this.el.on('hide.bs.modal', () => {
|
||
|
this.messagingService.send('modalClose');
|
||
|
});
|
||
|
this.el.on('hidden.bs.modal', () => {
|
||
|
modalRef.closed();
|
||
|
this.messagingService.send('modalClosed');
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
|
||
|
modalRef.onClose.pipe(first()).subscribe(() => {
|
||
|
if (this.el != null) {
|
||
|
this.el.modal('hide');
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
}
|