Да, работает, спасибо. Только не нашёл в документации, в какой именно момент обновляется значение, возвращаемое 'getModalsCount', так что немного иначе получилось, но суть та же:
@Injectable()
export class ModalWrapService {
private activeModals: BsModalRef[] = [];
constructor(private modalService: BsModalService) {
this.modalService.onHide.subscribe(reason => {
var topModalRef = this.activeModals.splice(this.activeModals.length - 1, 1)[0];
if (reason != null) {
topModalRef.content.result.next(null);
}
});
}
show(content: string | TemplateRef<any> | any, config?: ModalOptions): AnonymousSubject<any> {
var modalRef = this.modalService.show(content, config);
this.activeModals.push(modalRef);
modalRef.content.result.pipe(take(1)).subscribe(() => {
if (modalRef == (this.activeModals.length == 0 ? null : this.activeModals[this.activeModals.length - 1])) {
modalRef.hide();
}
});
return modalRef.content.result.pipe(take(1));
}
}