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, Input } from '@angular/core';
import { QueryParams, Consult } from '../../models/patientModels';
import { GridElement } from '../../models/uiModels';
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
import { ConsultComponent } from '../consult/consult.component';
import { AppState } from '../../models/state';
import { Store } from '@ngrx/store';
import * as patientActions from '../../actions/patient.action';
import * as _ from 'lodash';
@Component({
selector: 'app-consults',
templateUrl: './consults.component.html',
styleUrls: ['./consults.component.css']
})
export class ConsultsComponent {
_consults = {
data: [],
err: '',
dataTable: [],
};
data: any;
@Input()
set consults(incoming: {data: Consult[], err: string}) {
this._consults.data = incoming.data;
this._consults.err = incoming.err;
this._consults.dataTable = [];
if (incoming.data) { this.generateDataTable(); }
}
@Input()
queryParams: QueryParams;
dataDef: Array<GridElement> = [
{ header: 'Date/Time', key: 'requestDate', format: 'date', tooltip: 'Date of Request.' },
{ header: 'Status', key: 'status', tooltip: 'CPRS status of this consult (i.e. pending, active, complete, etc.).' },
{ header: 'Service', key: 'toService', tooltip: 'Service responsible for completion of consult/request.' },
{ header: 'Procedure/Consult', key: 'procedureConsult', tooltip: 'Procedure that was requested or a consult request.' },
{ header: 'Facility',
key: 'facility.stationNumber',
tooltip: 'Station number of facility where consult/procedure was performed.',
dataTooltipKey: 'facility.siteName'
}
];
constructor(private _store: Store<AppState>, private modalService: NgbModal ) { }
/**
* creates local dataTable array from the consult data
*/
generateDataTable() {
this._consults.dataTable = [];
// push the data into the data table
this._consults.data.forEach((itm, idx) => {
this._consults.dataTable.push({
requestDate: itm.requestDate,
status: itm.status,
toService: itm.toService,
procedureConsult: (itm.procedureConsult) ? itm.procedureConsult : 'Consult Request',
'facility.stationNumber': itm.facility.stationNumber,
'facility.siteName': itm.facility.siteName,
dataIndex: idx
});
});
}
/**
* Paging events bubble up from grid component. updating the store here triggers a requery
* @param action string in [prev, next, number]
*/
changePage(action: any) {
const newParams = JSON.parse(JSON.stringify(this.queryParams));
switch (action) {
case 'next':
newParams.page++;
break;
case 'prev':
if (newParams.page > 1) { newParams.page--; }
break;
default:
if (Number.isInteger(action)) { newParams.page = action; }
}
this._store.dispatch(new patientActions.SetQueryParameters({element: 'consults', params: JSON.parse(JSON.stringify(newParams)) }));
}
/**
* Method for displaying detailed Consults record in a modal popup
* @param dataTableRecord the Consult to display
*/
viewDetail(dataTableRecord: any) {
const consultModal = this.modalService.open(ConsultComponent, {size: 'lg', windowClass: 'record-popup'});
consultModal.componentInstance.data = {...this._consults.data[dataTableRecord.dataIndex]};
}
sync(params: QueryParams) {
const newParams = JSON.parse(JSON.stringify(this.queryParams));
newParams.filter = JSON.parse(JSON.stringify(params.filter));
newParams.sort = JSON.parse(JSON.stringify(params.sort));
newParams.size = params.size;
newParams.page = 1;
this._store.dispatch(new patientActions.SetQueryParameters({element: 'consults', params: JSON.parse(JSON.stringify(newParams)) }));
}
resetAndSync() {
this._store.dispatch(new patientActions.ResetQueryParameters({element: 'consults'}));
}
}