import React from 'react';
import { Grid, Col, Row, DropdownButton, MenuItem } from 'react-bootstrap';
import { Card, WaitIcon, Fa, observer } from '../../components';
import Form from '../../forms/form';
import { server } from '../../commons/server';
import { app } from '../../core/app';
import TreatProgress from './treat/treat-progress';
import TreatTimeline from './treat/treat-timeline';
import TreatmentUpdate from './treat/treat-update';
import EdtPrescription from './treat/edt-prescription';
import AddPrescription from './treat/add-prescription';
import TreatFollowup from './treat/treat-followup';
import NoTreatPanel from './treat/no-treat-panel';
import Events from './events';
/**
* Display the content of the case treatment tab
*/
class CaseTreatment extends React.Component {
constructor(props) {
super(props);
this.menuClick = this.menuClick.bind(this);
this.fetchData = this.fetchData.bind(this);
this.handleEvent = this.handleEvent.bind(this);
this.closeDlg = this.closeDlg.bind(this);
this.updateTreatment = this.updateTreatment.bind(this);
this.state = {
sc1: {
controls: [
{
type: 'string',
label: __('Regimen'),
value: doc => !doc.movedToIndividualized && doc.regimen ? doc.regimen.name : __('regimens.individualized'),
size: { md: 12 }
},
{
type: 'text',
property: 'regimenIni.name',
label: __('TbCase.regimenIni'),
visible: doc => doc.regimen && doc.regimenIni && doc.regimenIni.id !== doc.regimen.id,
size: { md: 12 }
},
{
type: 'period',
property: 'period',
label: __('cases.treat'),
size: { md: 12 }
}
]
}
};
}
componentWillMount() {
this.fetchData();
}
/**
* Called when treatment timeline must be updated
* @param {[type]} action [description]
* @return {[type]} [description]
*/
handleEvent(evt, doc) {
switch (evt) {
case Events.delPrescription:
this.deletePrescription(doc);
break;
case Events.updateTreatment:
this.updateTreatment();
break;
default:
}
}
deletePrescription(doc) {
return server.delete('/api/cases/case/treatment/prescription/delete/' + doc.data.prescriptionId)
.then(() => {
this.updateTreatment();
});
}
updateTreatment() {
this.setState({ fetching: true });
// remove treatment information
const tbcase = this.props.tbcase;
delete tbcase.treatment;
// start updating treatment
this.fetchData();
}
fetchData() {
const self = this;
const tbcase = this.props.tbcase;
// check if case is on treatment and has treatment information
if (!tbcase.treatment && tbcase.treatmentPeriod) {
const id = tbcase.id;
server.get('/api/cases/case/treatment/' + id)
.then(res => {
tbcase.treatment = res;
tbcase.treatmentPeriod = res.period;
self.setState({ fetching: false });
});
}
}
menuClick(key) {
switch (key) {
case 1:
app.dispatch(Events.addPrescription);
break;
case 2:
app.dispatch(Events.treatUpdateForm);
break;
case 3:
this.undoTreatment();
break;
default:
}
}
/**
* Undo the treatment, moving the case back to the 'not on treatment' state
*/
undoTreatment() {
app.messageDlg({
title: __('cases.treat.undo'),
message: __('cases.treat.undo.confirm'),
style: 'warning',
type: 'YesNo'
})
.then(res => {
if (res !== 'yes') {
return Promise.reject();
}
const caseId = this.props.tbcase.id;
return server.post('/api/cases/case/treatment/undo/' + caseId);
})
.then(() => app.dispatch('case-update'))
.catch(() => {});
}
closeDlg() {
this.setState({ show: null, prescDataEdt: null });
}
render() {
const tbcase = this.props.tbcase;
// is not on treatment
if (!tbcase.treatmentPeriod) {
return