bitwarden-estensione-browser/src/app/services/modal.service.ts

62 lines
2.1 KiB
TypeScript
Raw Normal View History

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');
}
});
}
}