Summary Table

Categories Total Count
PII 0
URL 0
DNS 0
EKL 0
IP 0
PORT 0
VsID 0
CF 0
AI 0
VPD 0
PL 0
Other 0

File Content

import { Component, OnInit, Inject, OnDestroy } from '@angular/core';
import { Subscription } from 'rxjs/Subscription';
import { Observable } from 'rxjs/Observable';
import { FormBuilder, Validators, FormGroup } from '@angular/forms';
import { DOCUMENT } from '@angular/platform-browser';
import { Subject } from 'rxjs/Subject';
import { PayerModel } from '../rfai-admin.model';
import { RfaiAdminService } from '../rfai-admin.service';
import { CanDeactivateGuard, CanComponentDeactivate } from '../../../shared/guards/can-deactivate-gaurd';

@Component({
selector: 'app-payer-info',
templateUrl: './payer-info.component.html',
styleUrls: ['./payer-info.component.scss']
})
export class PayerInfoComponent
implements OnInit, OnDestroy, CanComponentDeactivate {
subscription: Subscription = new Subscription();
payers: PayerModel[] = [];
tempPayerObj: PayerModel = new PayerModel();
tempNewPayerObj: PayerModel = new PayerModel();
payerModalForm: FormGroup;
payerModalClosed = true;
addPayerClicked = false;
dummyIndex = 0;
successMsg = '';
errorMsg = '';
errorStatus = false;
successStatus = false;
confirmModalClosed = true;
changesSaved = false;
discardChangesModalClosed = true;
tabIdx = '0';
discardChangesSubject: Subject<boolean> = new Subject<boolean>();
constructor(
@Inject(DOCUMENT) private document,
private canDeactivateGuard: CanDeactivateGuard,
private rfaiAdminService: RfaiAdminService,
private fb: FormBuilder
) {}

ngOnInit() {
this.getPayers();
this.formInit();
}
formInit() {
this.payerModalForm = this.fb.group({
payerId: [
this.tempNewPayerObj.payerIdentifier,
[
Validators.required,
Validators.pattern('[0-9A-Za-z]{2,80}') // alphanumeric length >= 2 and <= 80
]
],
payerDescription: [
this.tempNewPayerObj.payerIdentifierDesc,
[Validators.required]
]
});
}
getPayers() {
this.subscription.add(
this.rfaiAdminService.getPayers().subscribe(
data => {
this.payers = data;
this.payers.forEach(payer => {
(payer.archiveImg = '../../assets/images/ic_archive_red_24.svg'),
(payer.editTableImg =
'../../assets/images/ic_edit_table_blue_24.svg');
});
},
error => {
console.log('getLoincModifierCodes() error', error);
}
)
);
}

openAddPayerModal() {
this.payerModalForm.reset();
this.addPayerClicked = true;
this.onPayerModalOpenCommon();
this.payerModalClosed = false;
}

openEditPayerModal(payerObj: PayerModel) {
this.addPayerClicked = false;
this.onPayerModalOpenCommon();
this.tempNewPayerObj = { ...payerObj };
this.tempPayerObj = { ...payerObj };
this.payerModalClosed = false;
}

onPayerModalOpenCommon() {
this.document.body.style.overflow = 'hidden';
this.tabIdx = '-1';
this.rfaiAdminService.setTabIdx(this.tabIdx);
this.tempNewPayerObj = new PayerModel();
}
onPayerModalClose() {
this.document.body.style.overflow = 'visible';
this.tabIdx = '0';
this.rfaiAdminService.setTabIdx(this.tabIdx);
this.payerModalClosed = true;
this.addPayerClicked = false;
this.payerModalForm.reset();
}

addPayer() {
this.document.body.style.overflow = 'visible';
this.payerModalClosed = true;
this.canDeactivateGuard.setCanLogout(false);
this.changesSaved = false;

if (
this.tempNewPayerObj.payerIdentifier &&
this.tempNewPayerObj.payerIdentifierDesc
) {
this.tempNewPayerObj.payerIndex = 'N' + this.dummyIndex;
this.tempNewPayerObj.editedOrNewFlag = true;
this.payers.push({ ...this.tempNewPayerObj });
this.dummyIndex++;
}
}

editPayer(newPayer: PayerModel, oldPayer: PayerModel) {
this.payerModalClosed = true;
this.canDeactivateGuard.setCanLogout(false);
this.changesSaved = false;

this.document.body.style.overflow = 'visible';
newPayer.editedOrNewFlag = true;
const indexElement = this.payers.findIndex(
payer => payer.payerIndex === oldPayer.payerIndex
);
if (indexElement > -1) {
this.payers[indexElement] = { ...newPayer };
}
}

submitPayerInfo(): void {
this.dummyIndex = 0;
const requestBody = {
payerInfoList: this.payers.filter(payer => payer.editedOrNewFlag)
};
if (
requestBody.payerInfoList.some(payer => payer.archive) &&
this.confirmModalClosed
) {
this.openConfirmationModal();
return;
}

this.subscription.add(
this.rfaiAdminService.postPayerInfo(requestBody).subscribe(
data => {
this.changesSaved = true;
this.canDeactivateGuard.setCanLogout(true);
this.confirmModalClosed = true;
window.scrollTo(0, 0);
this.successMsg = 'Successfully updated Payer Info.';
this.successStatus = true;
this.rfaiAdminService.setStatus(true, this.successStatus);
this.rfaiAdminService.setMsg(true, this.successMsg);
this.errorStatus = false;
this.getPayers();
setTimeout(() => {
this.successStatus = false;
this.rfaiAdminService.setStatus(true, this.successStatus);
this.rfaiAdminService.setMsg(true, '');
}, 8000);
},
error => {
this.errorStatus = true;
this.confirmModalClosed = true;
this.successStatus = false;
this.errorMsg = error.error.message;
this.rfaiAdminService.setStatus(false, this.errorStatus);
this.rfaiAdminService.setMsg(false, this.errorMsg);
setTimeout(() => {
this.errorStatus = false;
this.rfaiAdminService.setStatus(false, this.errorStatus);
this.rfaiAdminService.setMsg(false, '');
}, 8000);
}
)
);
}

openConfirmationModal() {
this.confirmModalClosed = false;
this.tabIdx = '-1';
this.rfaiAdminService.setTabIdx(this.tabIdx);
}

closeConfirmationModal() {
// callback from app-modal
this.confirmModalClosed = true;
this.tabIdx = '0';
this.rfaiAdminService.setTabIdx(this.tabIdx);
}
resetPayerInfo(): void {
this.dummyIndex = 0;
this.tabIdx = '0';
this.rfaiAdminService.setTabIdx(this.tabIdx);
this.changesSaved = false;
this.payerModalClosed = true;
this.addPayerClicked = false;
this.getPayers();
}

archivePayer(payer: PayerModel) {
if (payer.archive) {
payer.archive = false;
payer.editedOrNewFlag = false;
payer.archiveImg = '../../assets/images/ic_archive_red_24.svg';
payer.editTableImg = '../../assets/images/ic_edit_table_blue_24.svg';
} else {
payer.archive = true;
payer.editedOrNewFlag = true;
payer.archiveImg = '../../assets/images/ic_archive_white_24.svg';
payer.editTableImg = '../../assets/images/ic_edit_table_white_24.svg';
}
if (this.payers.some(data => data.editedOrNewFlag === true)) {
this.canDeactivateGuard.setCanLogout(false);
this.changesSaved = false;
}
}
closeDiscardChangesModal() {
this.discardChangesModalClosed = true;
this.tabIdx = '0';
this.rfaiAdminService.setTabIdx(this.tabIdx);
}

openDiscardChangesModal(): Observable<boolean> {
setTimeout(() => {
if (!this.discardChangesModalClosed) {
// stop showing the message after 30 seconds, passive cancel
this.discardChangesModalClosed = true;
this.tabIdx = '0';
this.rfaiAdminService.setTabIdx(this.tabIdx);
this.discardChangesSubject.next(false);
}
}, 30000);
this.discardChangesModalClosed = false;
this.tabIdx = '-1';
this.rfaiAdminService.setTabIdx(this.tabIdx);
return this.discardChangesSubject.asObservable();
}

canDeactivate(): Observable<boolean> | boolean {
if (this.payers.some(payer => payer.editedOrNewFlag)) {
if (!this.changesSaved) {
// return window.confirm('Navigating away from this page will discard your changes. Click "OK" to continue and discard unsaved changes, or click "Cancel" to remain on the page.');
this.canDeactivateGuard.setCanLogout(false);
return this.openDiscardChangesModal();
} else {
return true;
}
} else {
return true;
}
}

action(value: boolean) {
this.discardChangesSubject.next(value);
this.canDeactivateGuard.setCanLogout(value);
this.closeDiscardChangesModal();
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}