@pih/esm-pathology-app 1.0.2 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/00ebb57bb20c59433e84.gif +0 -0
- package/dist/16.js +3 -0
- package/dist/16.js.LICENSE.txt +1 -0
- package/dist/16.js.map +1 -0
- package/dist/24.js +3 -0
- package/dist/24.js.LICENSE.txt +16 -0
- package/dist/24.js.map +1 -0
- package/dist/248.js +3 -0
- package/dist/248.js.LICENSE.txt +99 -0
- package/dist/248.js.map +1 -0
- package/dist/294.js +3 -0
- package/dist/294.js.LICENSE.txt +14 -0
- package/dist/294.js.map +1 -0
- package/dist/574.js +1 -0
- package/dist/5b8bb278fcab4da4972e.ttf +0 -0
- package/dist/861.js +2 -0
- package/dist/861.js.map +1 -0
- package/dist/867.js +2 -0
- package/dist/867.js.map +1 -0
- package/dist/976.js +3 -0
- package/dist/976.js.LICENSE.txt +8 -0
- package/dist/976.js.map +1 -0
- package/dist/a5fad24f075c978ac04b.ttf +0 -0
- package/dist/pih-esm-pathology-app.js +1 -1
- package/dist/pih-esm-pathology-app.js.buildmanifest.json +153 -25
- package/dist/pih-esm-pathology-app.js.map +1 -1
- package/package.json +21 -10
- package/src/Fonts/georgia/GEORGIA4.TTF +0 -0
- package/src/Fonts/georgia/Georgia Bold Italic font.ttf +0 -0
- package/src/Fonts/georgia/Georgia Regular font.ttf +0 -0
- package/src/Fonts/georgia/Georgia.ttf +0 -0
- package/src/Fonts/georgia/georgia bold italic.ttf +0 -0
- package/src/Fonts/georgia/georgia italic.ttf +0 -0
- package/src/Fonts/georgia/georgia-bold.ttf +0 -0
- package/src/Fonts/georgia/georgiab.ttf +0 -0
- package/src/Fonts/georgia/georgiai.ttf +0 -0
- package/src/Fonts/georgia/georgiaz.ttf +0 -0
- package/src/Fonts/georgia/seriffic.ttf +0 -0
- package/src/Fonts/georgia/sharefonts.net.txt +1 -0
- package/src/Print-to-PDF/Document-Component.tsx +256 -0
- package/src/config-schema.ts +105 -6
- package/src/declarations.d.tsx +3 -0
- package/src/images/ButaroHospitalLogo.gif +0 -0
- package/src/pathology-report/ReportComponent.resource.ts +37 -34
- package/src/pathology-report/ReportComponent.tsx +46 -9
- package/src/test.html +0 -0
- package/webpack.config.js +30 -1
- package/dist/574.pih-esm-pathology-app.js +0 -1
- package/dist/633.pih-esm-pathology-app.js +0 -3
- package/dist/633.pih-esm-pathology-app.js.LICENSE.txt +0 -29
- package/dist/633.pih-esm-pathology-app.js.map +0 -1
- package/dist/66.pih-esm-pathology-app.js +0 -2
- package/dist/66.pih-esm-pathology-app.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_pih_esm_pathology_app=self.webpackChunk_pih_esm_pathology_app||[]).push([[66],{66:(e,t,a)=>{a.r(t),a.d(t,{default:()=>E});var n=a(954),o=a(379),r=a.n(o),s=a(724);r()(s.Z,{insert:"head",singleton:!1});const l=s.Z.locals||{};var d=a(489),u=a(311),i=a(832),p=a(529),c=a(289),m=a(758),f=a(586),h=a(450),A=a(188),y=a(17);r()(y.Z,{insert:"head",singleton:!1});const g=y.Z.locals||{};async function b(e){var t;const a=(await(0,d.openmrsFetch)("/ws/rest/v1/session")).data.user.person.uuid;return null===(t=(await(0,d.openmrsFetch)(`/ws/rest/v1/person/${a}/attribute`)).data.results.filter((t=>t.attributeType.uuid===e))[0])||void 0===t?void 0:t.value.uuid}async function _(e){return(await(0,d.openmrsFetch)(`/ws/rest/v1/concept/${e}?v=full`)).data.answers}const C=()=>{const e=(0,d.useConfig)(),[t,a]=n.default.useState(),[o,r]=n.default.useState([]),[s,l]=n.default.useState(""),[y,C]=n.default.useState([]),[E,v]=n.default.useState([]),[w,U]=n.default.useState([]),[S,k]=n.default.useState(""),[D,I]=n.default.useState(""),[O,B]=n.default.useState("");n.default.useEffect((()=>{b(e.healthCenterAttrTypeUUID).then(a),async function(){return(await(0,d.openmrsFetch)("/ws/rest/v1/location")).data.results}().then(C),_(e.sampleStatusConceptUUID).then(v),_(e.referralStatusConceptUUID).then(U),async function(e,t){const a=await b(e);let n=null;return n=a&&a!=t?await(0,d.openmrsFetch)(`/ws/rest/v1/reportingrest/reportdata/996cf192-ff54-11eb-a63a-080027ce9ca0?location=${a}`):await(0,d.openmrsFetch)("/ws/rest/v1/reportingrest/reportdata/996cf192-ff54-11eb-a63a-080027ce9ca0"),n.data.dataSets[0].rows}(e.healthCenterAttrTypeUUID,e.pathologyFullAllowedLocationUUID).then(r)}),[]);const x=o.filter((e=>{var t;return!S||(null===(t=e.sampleStatusObs)||void 0===t?void 0:t.toLowerCase())==S.toLowerCase()})).filter((e=>{var t;return!D||(null===(t=e.referralStatusObs)||void 0===t?void 0:t.toLowerCase())==D.toLowerCase()})).filter((e=>{var t;return!s||(null===(t=e.patientHealthCenter)||void 0===t?void 0:t.toLowerCase())==s.toLowerCase()})).filter((e=>{if(O){const t=O.split(/\s+/),a=`${e.family_name} ${e.middle_name} ${e.given_name}`;return t.every((e=>new RegExp("\\b"+e,"i").test(a)))}return!0})).map((a=>({id:a.encounterId,patientNames:n.default.createElement("a",{"data-testid":"patientNames",href:`/openmrs/patientDashboard.form?patientId=${a.personId}`},a.family_name," ",a.given_name," ",a.middle_name),pathologyRequest:n.default.createElement("a",{href:`/openmrs/module/htmlformentry/htmlFormEntry.form?encounterId=${a.encounterId}&mode=VIEW`}," ","Link"," "),sendingHospital:a.patientHealthCenter,phoneNumber:a.patientPhoneNumber||"",sampleStatus:n.default.createElement("select",{onChange:e=>F({uuid:e.target.value,display:e.target.options[e.target.selectedIndex].text},a)},n.default.createElement("option",{value:""}),E.map((e=>n.default.createElement("option",{"data-testid":"sampleStatus-option",value:e.uuid,key:e.uuid,selected:!!a.sampleStatusObs&&a.sampleStatusObs===e.display&&!0},e.display)))),dateOfRequest:a.encounterDatetime,referralStatus:n.default.createElement("select",{onChange:e=>Z({uuid:e.target.value,display:e.target.options[e.target.selectedIndex].text},a)},n.default.createElement("option",{"data-testid":"referralStatus-option",value:""}),w.map((e=>n.default.createElement("option",{value:e.uuid,key:e.uuid,selected:a.referralStatusObs&&a.referralStatusObs===e.display},e.display)))),sampleDropOff:n.default.createElement("input",{"data-testid":"sampleDropOff",type:"checkbox",checked:Boolean(a.sampleDropoffObs),onChange:e=>R(a)}),resultsEncounter:a.resultsEncounterId?n.default.createElement("a",{"data-testid":"resultsEncounter",href:`/openmrs/module/htmlformentry/htmlFormEntry.form?encounterId=${a.resultsEncounterId}&mode=VIEW`}," ","Results"," "):!t&&n.default.createElement("a",{href:`/openmrs/module/htmlformentry/htmlFormEntry.form?personId=${a.personId}&patientId=${a.personId}&returnUrl=&formId=${e.pathologyResultsFromID}&uuid=${a.encounterUuid}`}," ","Fill in results"," ")}))),R=t=>{const a=(0,u.Z)(o);t.sampleDropoffObs?async function(e){return await(0,d.openmrsFetch)(`/ws/rest/v1/obs/${e}`,{method:"POST",headers:{"content-type":"application/json"},body:{voided:!0}})}(t.sampleDropoffObsUuid).then((e=>{if(e.ok){const e=a.findIndex((e=>e.encounterUuid==t.encounterUuid));a[e].sampleDropoffObs="",a[e].sampleDropoffObsUuid="",r(a)}})):async function(e,t,a,n){const o={person:e.patientUuid,obsDatetime:(new Date).toISOString(),concept:t,location:await b(a),encounter:e.encounterUuid,value:n,voided:!1};return await(0,d.openmrsFetch)("/ws/rest/v1/obs",{method:"POST",headers:{"content-type":"application/json"},body:o})}(t,e.sampleDropOffconceptUUID,e.healthCenterAttrTypeUUID,e.yesConceptUUID).then((n=>{if(n.ok){const o=a.findIndex((e=>e.encounterUuid==t.encounterUuid));a[o].sampleDropoffObs=e.yesConceptName,a[o].sampleDropoffObsUuid=n.data.uuid,r(a)}}))},F=(t,a)=>{const n=(0,u.Z)(o);a.sampleStatusObs?async function(e,t,a,n){const o={person:t.patientUuid,obsDatetime:(new Date).toISOString(),concept:a,location:await b(n),encounter:t.encounterUuid,value:e.uuid,voided:!e};return await(0,d.openmrsFetch)(`/ws/rest/v1/obs/${t.sampleStatusObsUuid}`,{method:"POST",headers:{"content-type":"application/json"},body:o})}(t,a,e.sampleStatusConceptUUID,e.healthCenterAttrTypeUUID).then((e=>{if(e.ok){const o=n.findIndex((e=>e.encounterUuid==a.encounterUuid));n[o].sampleStatusObs=t.display,n[o].sampleStatusObsUuid=e.data.uuid,r(n)}else r(n)})):async function(e,t,a,n){const o={person:t.patientUuid,obsDatetime:(new Date).toISOString(),concept:a,location:await b(n),encounter:t.encounterUuid,value:e,voided:!1};return await(0,d.openmrsFetch)("/ws/rest/v1/obs",{method:"POST",headers:{"content-type":"application/json"},body:o})}(t.uuid,a,e.sampleStatusConceptUUID,e.healthCenterAttrTypeUUID).then((e=>{if(e.ok){const o=n.findIndex((e=>e.encounterUuid==a.encounterUuid));n[o].sampleStatusObs=t.display,n[o].sampleStatusObsUuid=e.data.uuid,r(n)}else r(n)}))},Z=(t,a)=>{const n=(0,u.Z)(o);a.referralStatusObs?async function(e,t,a,n){const o={person:t.patientUuid,obsDatetime:(new Date).toISOString(),concept:a,location:await b(n),encounter:t.encounterUuid,value:e.uuid,voided:!e};return await(0,d.openmrsFetch)(`/ws/rest/v1/obs/${t.referralStatusObsUuid}`,{method:"POST",headers:{"content-type":"application/json"},body:o})}(t,a,e.referralStatusConceptUUID,e.healthCenterAttrTypeUUID).then((e=>{if(e.ok){const o=n.findIndex((e=>e.encounterUuid==a.encounterUuid));n[o].referralStatusObs=t.display,n[o].referralStatusObsUuid=e.data.uuid,r(n)}else r(n)})):async function(e,t,a,n){const o={person:t.patientUuid,obsDatetime:(new Date).toISOString(),concept:a,location:await b(n),encounter:t.encounterUuid,value:e,voided:!1};return await(0,d.openmrsFetch)("/ws/rest/v1/obs",{method:"POST",headers:{"content-type":"application/json"},body:o})}(t.uuid,a,e.referralStatusConceptUUID,e.healthCenterAttrTypeUUID).then((e=>{if(e.ok){const o=n.findIndex((e=>e.encounterUuid==a.encounterUuid));n[o].referralStatusObs=t.display,n[o].referralStatusObsUuid=e.data.uuid,r(n)}else r(n)}))};return n.default.createElement("div",null,n.default.createElement("div",{className:g.filtersContainer},n.default.createElement("label",{htmlFor:"sending-hospital"},"Sending Hospital "),n.default.createElement("select",{id:"sending-hospital",className:g.dropdown,value:s,onChange:e=>l(e.target.value)},n.default.createElement("option",{value:""}),y.map((a=>t&&t!==e.pathologyFullAllowedLocationUUID?a.uuid===t?n.default.createElement("option",{value:a.display,key:a.uuid},a.display):null:n.default.createElement("option",{value:a.display,key:a.uuid},a.display)))),n.default.createElement("label",{htmlFor:"sample-status"},"Sample Status "),n.default.createElement("select",{id:"sample-status",className:g.dropdown,value:S,onChange:e=>k(e.target.value)},n.default.createElement("option",{value:""}),E.map((e=>n.default.createElement("option",{value:e.display,key:e.uuid},e.display)))),n.default.createElement("label",{htmlFor:"referral-status"},"Referral Status "),n.default.createElement("select",{id:"referral-status",className:g.dropdown,value:D,onChange:e=>I(e.target.value)},n.default.createElement("option",{value:""}),w.map((e=>n.default.createElement("option",{value:e.display,key:e.uuid},e.display)))),n.default.createElement("label",{htmlFor:"patient-name"},"Patient Name "),n.default.createElement("input",{id:"patient-name",className:g.textBox,type:"text",onChange:e=>B(e.target.value)})),n.default.createElement("div",{className:g.tableContainer},n.default.createElement(i.ZP,{rows:x,headers:[{key:"patientNames",header:"Patient name"},{key:"pathologyRequest",header:"pathology request"},{key:"sendingHospital",header:"Sending Hospital"},{key:"phoneNumber",header:"Phone number"},{key:"sampleStatus",header:"Sample status"},{key:"dateOfRequest",header:"Date of Request"},{key:"referralStatus",header:"Referral status"},{key:"sampleDropOff",header:"Sample drop off?"},{key:"resultsEncounter",header:"Results"}]},(({rows:e,headers:t,getTableProps:a,getHeaderProps:o,getRowProps:r})=>n.default.createElement(p.Z,a(),n.default.createElement(c.Z,null,n.default.createElement(m.Z,null,t.map((e=>n.default.createElement(f.Z,o({header:e}),e.header))))),n.default.createElement(h.Z,null,e.map((e=>n.default.createElement(m.Z,r({row:e}),e.cells.map((e=>n.default.createElement(A.Z,{key:e.id},e.value))))))))))))},E=()=>n.default.createElement("div",{className:`omrs-main-content ${l.container}`},n.default.createElement(C,null))},17:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(15),o=a.n(n),r=a(645),s=a.n(r)()(o());s.push([e.id,".-esm-pathology__ReportComponent__tableContainer___YHJce {\n height: 500px;\n overflow-x: auto;\n margin: 0 1rem;\n border: 2px solid lightgrey;\n border-radius: 0.25rem;\n}\n\n.-esm-pathology__ReportComponent__filtersContainer___6OaUS {\n border-radius: 0.25rem;\n margin: 0 1rem;\n padding-top: 4%;\n}\n\n.-esm-pathology__ReportComponent__dropdown___3u271 {\n width: 10%;\n height: 2rem;\n background: transparent;\n border: 1px solid var(--omrs-color-ink-lowest-contrast);\n background-clip: padding-box;\n border-radius: 4px;\n margin: 1rem;\n}\n.-esm-pathology__ReportComponent__dropdown___3u271:disabled {\n opacity: 0.8;\n background: lightgrey;\n cursor: not-allowed;\n}\n.-esm-pathology__ReportComponent__dropdown___3u271:focus {\n border: 2px solid var(--omrs-color-interaction);\n outline: 0;\n}\n.-esm-pathology__ReportComponent__textBox___17N1_ {\n background: transparent;\n border: 1px solid var(--omrs-color-ink-lowest-contrast);\n background-clip: padding-box;\n border-radius: 4px;\n margin: 1rem;\n}\n","",{version:3,sources:["webpack://./src/pathology-report/ReportComponent.css"],names:[],mappings:"AAAA;EACE,aAAa;EACb,gBAAgB;EAChB,cAAc;EACd,2BAA2B;EAC3B,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;EACtB,cAAc;EACd,eAAe;AACjB;;AAEA;EACE,UAAU;EACV,YAAY;EACZ,uBAAuB;EACvB,uDAAuD;EACvD,4BAA4B;EAC5B,kBAAkB;EAClB,YAAY;AACd;AACA;EACE,YAAY;EACZ,qBAAqB;EACrB,mBAAmB;AACrB;AACA;EACE,+CAA+C;EAC/C,UAAU;AACZ;AACA;EACE,uBAAuB;EACvB,uDAAuD;EACvD,4BAA4B;EAC5B,kBAAkB;EAClB,YAAY;AACd",sourcesContent:[".tableContainer {\n height: 500px;\n overflow-x: auto;\n margin: 0 1rem;\n border: 2px solid lightgrey;\n border-radius: 0.25rem;\n}\n\n.filtersContainer {\n border-radius: 0.25rem;\n margin: 0 1rem;\n padding-top: 4%;\n}\n\n.dropdown {\n width: 10%;\n height: 2rem;\n background: transparent;\n border: 1px solid var(--omrs-color-ink-lowest-contrast);\n background-clip: padding-box;\n border-radius: 4px;\n margin: 1rem;\n}\n.dropdown:disabled {\n opacity: 0.8;\n background: lightgrey;\n cursor: not-allowed;\n}\n.dropdown:focus {\n border: 2px solid var(--omrs-color-interaction);\n outline: 0;\n}\n.textBox {\n background: transparent;\n border: 1px solid var(--omrs-color-ink-lowest-contrast);\n background-clip: padding-box;\n border-radius: 4px;\n margin: 1rem;\n}\n"],sourceRoot:""}]),s.locals={tableContainer:"-esm-pathology__ReportComponent__tableContainer___YHJce",filtersContainer:"-esm-pathology__ReportComponent__filtersContainer___6OaUS",dropdown:"-esm-pathology__ReportComponent__dropdown___3u271",textBox:"-esm-pathology__ReportComponent__textBox___17N1_"};const l=s},724:(e,t,a)=>{a.d(t,{Z:()=>l});var n=a(15),o=a.n(n),r=a(645),s=a.n(r)()(o());s.push([e.id,".-esm-pathology__pathology__container___3OaBf {\n padding: 2em;\n}\n","",{version:3,sources:["webpack://./src/pathology.css"],names:[],mappings:"AAAA;EACE,YAAY;AACd",sourcesContent:[".container {\n padding: 2em;\n}\n"],sourceRoot:""}]),s.locals={container:"-esm-pathology__pathology__container___3OaBf"};const l=s}}]);
|
|
2
|
-
//# sourceMappingURL=66.pih-esm-pathology-app.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"66.pih-esm-pathology-app.js","mappings":"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","sources":["webpack://@pih/esm-pathology-app/./src/pathology.css?9d3a","webpack://@pih/esm-pathology-app/./src/pathology-report/ReportComponent.css?a61d","webpack://@pih/esm-pathology-app/./src/pathology-report/ReportComponent.resource.ts","webpack://@pih/esm-pathology-app/./src/pathology-report/ReportComponent.tsx","webpack://@pih/esm-pathology-app/./src/PathologySystem.tsx","webpack://@pih/esm-pathology-app/./src/pathology-report/ReportComponent.css","webpack://@pih/esm-pathology-app/./src/pathology.css"],"sourcesContent":["import api from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./pathology.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].use[1]!./ReportComponent.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { openmrsFetch } from \"@openmrs/esm-framework\";\n\nexport interface EncounterResult {\n family_name: string;\n given_name: string;\n middle_name: string;\n patientPhoneNumber: { value: string };\n patientHealthCenter: string;\n patientUuid: string;\n encounterUuid: string;\n encounterId: number;\n personId: number;\n encounterDatetime: Date;\n sampleStatusObs: string;\n referralStatusObs: string;\n sampleDropoffObs: string;\n resultsEncounterId: string;\n}\nexport interface Patient {\n uuid: string;\n}\nexport interface Concept {\n uuid: string;\n name: string;\n display: string;\n}\nexport interface Obs {\n patientUuid: string;\n obsDateTime: string;\n sampleDropoffObsUuid: string;\n referralStatusObsUuid: string;\n sampleStatusObsUuid: string;\n location: string;\n encounterUuid: string;\n valueCodedName: string;\n voided: boolean;\n}\n\n// export async function getPatientEncounters(patientUuid): Promise<Array<EncounterResult>> {\n// const searchPatientEncounters = await openmrsFetch(\n// `/ws/rest/v1/encounter?encounterType=${ENCOUNTERTYPEUUID}&patient=${patientUuid}`,\n// );\n// const fullPatientEncounterData = searchPatientEncounters.data.results.map(async (searchEnc) => {\n// const enc = await openmrsFetch(`/ws/rest/v1/encounter/${searchEnc.uuid}?v=full`);\n// const searchPatient = await openmrsFetch(`/ws/rest/v1/patient/${patientUuid}?v=full`);\n// const retrievedObject = {\n// patientName: searchPatient.data.person.names[0],\n// patientPhoneNumber: searchPatient.data.person.attributes.filter(\n// (attribute) => attribute.attributeType.uuid == PHONENUMBERATTRUUID,\n// )[0],\n// patientHealthCenter: searchPatient.data.person.attributes.filter(\n// (attribute) => attribute.attributeType.uuid == HEALTHCENTERATTRTYPEUUID,\n// )[0],\n// patientUuid: searchPatient.data.uuid,\n// encUuid: enc.data.uuid,\n// encounterDatetime: enc.data.encounterDatetime,\n// sampleStatusObs: enc.data.obs.filter((obs) => obs.concept.uuid === SAMPLESTATUSUUID)[0],\n// referralStatusObs: enc.data.obs.filter((obs) => obs.concept.uuid === REFERRALSTATUSUUID)[0],\n// sampleDropoffObs: enc.data.obs.filter((obs) => obs.concept.uuid === SAMPLEDROPOFFUUID)[0],\n// };\n\n// return retrievedObject;\n// });\n// return Promise.all(fullPatientEncounterData);\n// }\n\nexport async function getUserLocation(healthCenterAttrTypeUUID) {\n const session = await openmrsFetch(`/ws/rest/v1/session`);\n const personUuid = session.data.user.person.uuid;\n const person = await openmrsFetch(\n `/ws/rest/v1/person/${personUuid}/attribute`\n );\n const hcPersonAttribute = person.data.results.filter(\n (attr) => attr.attributeType.uuid === healthCenterAttrTypeUUID\n );\n return hcPersonAttribute[0]?.value.uuid;\n}\n\nexport async function getConceptAnswers(conceptUuid) {\n const concept = await openmrsFetch(\n `/ws/rest/v1/concept/${conceptUuid}?v=full`\n );\n return concept.data.answers;\n}\n\nexport async function getLocations() {\n const location = await openmrsFetch(`/ws/rest/v1/location`);\n\n return location.data.results;\n}\n\n// export async function getPatient(patientUuid): Promise<Patient> {\n// const searchPatient = await openmrsFetch(`/ws/rest/v1/patient/c604dabc-2700-102b-80cb-0017a47871b2?v=full`);\n// return searchPatient.data;\n// }\n\nexport async function getEncounters(\n healthCenterAttrTypeUUID: string,\n pathologyFullAllowedLocationUUID: string\n): Promise<Array<EncounterResult>> {\n const userLocationUUID = await getUserLocation(healthCenterAttrTypeUUID);\n\n let searchEncounter = null;\n if (\n userLocationUUID &&\n userLocationUUID != pathologyFullAllowedLocationUUID\n ) {\n searchEncounter = await openmrsFetch(\n `/ws/rest/v1/reportingrest/reportdata/996cf192-ff54-11eb-a63a-080027ce9ca0?location=${userLocationUUID}`\n );\n } else {\n searchEncounter = await openmrsFetch(\n `/ws/rest/v1/reportingrest/reportdata/996cf192-ff54-11eb-a63a-080027ce9ca0`\n );\n }\n return searchEncounter.data.dataSets[0].rows;\n}\n\nexport async function postSampleDropoffObs(\n obsObject: Obs,\n sampleDropOffconceptUUID: string,\n healthCenterAttrTypeUUID: string,\n yesConceptName: string\n) {\n const ObsObjectTocreate = {\n person: obsObject.patientUuid,\n obsDatetime: new Date().toISOString(),\n concept: sampleDropOffconceptUUID,\n location: await getUserLocation(healthCenterAttrTypeUUID),\n encounter: obsObject.encounterUuid,\n value: yesConceptName,\n voided: false,\n };\n\n const response = await openmrsFetch(\"/ws/rest/v1/obs\", {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: ObsObjectTocreate,\n });\n return response;\n}\n\nexport async function voidSampleDropoff(sampleDropoffObsUuid: string) {\n const ObsObjectTocreate = {\n voided: true,\n };\n\n const response = await openmrsFetch(\n `/ws/rest/v1/obs/${sampleDropoffObsUuid}`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: ObsObjectTocreate,\n }\n );\n\n return response;\n}\n\nexport async function postSampleStatusChangeObs(\n newStatusUuid: string,\n obs: Obs,\n sampleStatusConceptUUID: string,\n healthCenterAttrTypeUUID: string\n) {\n const postBody = {\n person: obs.patientUuid,\n obsDatetime: new Date().toISOString(),\n concept: sampleStatusConceptUUID,\n location: await getUserLocation(healthCenterAttrTypeUUID),\n encounter: obs.encounterUuid,\n value: newStatusUuid,\n voided: false,\n };\n\n const response = await openmrsFetch(\"/ws/rest/v1/obs\", {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: postBody,\n });\n\n return response;\n}\n\nexport async function updateSampleStatusChangeObs(\n newStatus: null | { uuid: string; display: string },\n obsObject: Obs,\n sampleStatusConceptUUID: string,\n healthCenterAttrTypeUUID: string\n) {\n const ObsObjectTocreate = {\n person: obsObject.patientUuid,\n obsDatetime: new Date().toISOString(),\n concept: sampleStatusConceptUUID,\n location: await getUserLocation(healthCenterAttrTypeUUID),\n encounter: obsObject.encounterUuid,\n value: newStatus.uuid,\n voided: newStatus ? false : true,\n };\n\n const response = await openmrsFetch(\n `/ws/rest/v1/obs/${obsObject.sampleStatusObsUuid}`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: ObsObjectTocreate,\n }\n );\n\n return response;\n}\n\nexport async function postReferralStatusChangeObs(\n targetValueUuid: string,\n obsObject: Obs,\n referralStatusConceptUUID: string,\n healthCenterAttrTypeUUID: string\n) {\n const ObsObjectTocreate = {\n person: obsObject.patientUuid,\n obsDatetime: new Date().toISOString(),\n concept: referralStatusConceptUUID,\n location: await getUserLocation(healthCenterAttrTypeUUID),\n encounter: obsObject.encounterUuid,\n value: targetValueUuid,\n voided: false,\n };\n\n const response = await openmrsFetch(\"/ws/rest/v1/obs\", {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: ObsObjectTocreate,\n });\n\n return response;\n}\n\nexport async function updateReferralStatusChangeObs(\n targetValue,\n obsObject: Obs,\n referralStatusConceptUUID,\n healthCenterAttrTypeUUID\n) {\n const ObsObjectTocreate = {\n person: obsObject.patientUuid,\n obsDatetime: new Date().toISOString(),\n concept: referralStatusConceptUUID,\n location: await getUserLocation(healthCenterAttrTypeUUID),\n encounter: obsObject.encounterUuid,\n value: targetValue.uuid,\n voided: targetValue ? false : true,\n };\n\n const response = await openmrsFetch(\n `/ws/rest/v1/obs/${obsObject.referralStatusObsUuid}`,\n {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: ObsObjectTocreate,\n }\n );\n\n return response;\n}\n","import React from \"react\";\nimport { useConfig } from \"@openmrs/esm-framework\";\nimport cloneDeep from \"lodash-es/cloneDeep\";\nimport DataTable, {\n Table,\n TableHead,\n TableRow,\n TableHeader,\n TableBody,\n TableCell,\n} from \"carbon-components-react/es/components/DataTable\";\n\nimport styles from \"./ReportComponent.css\";\nimport {\n getUserLocation,\n getConceptAnswers,\n getLocations,\n getEncounters,\n postSampleDropoffObs,\n voidSampleDropoff,\n postSampleStatusChangeObs,\n updateSampleStatusChangeObs,\n postReferralStatusChangeObs,\n updateReferralStatusChangeObs,\n EncounterResult,\n Concept,\n} from \"./ReportComponent.resource\";\nimport { Config } from \"../config-schema\";\n\nconst ReportComponent = () => {\n const config = useConfig() as Config;\n const [userLocation, setUserLocation] = React.useState();\n const [encountersList, setEncountersList] = React.useState<\n Array<EncounterResult>\n >([]);\n const [sendingHospital, setSendingHospital] = React.useState(\"\");\n const [listOfHospitals, setListOfHospitals] = React.useState([]);\n const [sampleStatusAnswers, setSampleStatusAnswers] = React.useState<\n Array<Concept>\n >([]);\n const [referralStatusAnswers, setReferralStatusAnswers] = React.useState<\n Array<Concept>\n >([]);\n const [sampleStatus, setSampleStatus] = React.useState(\"\");\n const [referralStatus, setReferralStatus] = React.useState(\"\");\n const [patientName, setPatientName] = React.useState(\"\");\n const headers = [\n {\n key: \"patientNames\",\n header: \"Patient name\",\n },\n {\n key: \"pathologyRequest\",\n header: \"pathology request\",\n },\n {\n key: \"sendingHospital\",\n header: \"Sending Hospital\",\n },\n {\n key: \"phoneNumber\",\n header: \"Phone number\",\n },\n {\n key: \"sampleStatus\",\n header: \"Sample status\",\n },\n {\n key: \"dateOfRequest\",\n header: \"Date of Request\",\n },\n {\n key: \"referralStatus\",\n header: \"Referral status\",\n },\n {\n key: \"sampleDropOff\",\n header: \"Sample drop off?\",\n },\n {\n key: \"resultsEncounter\",\n header: \"Results\",\n },\n ];\n\n React.useEffect(() => {\n getUserLocation(config.healthCenterAttrTypeUUID).then(setUserLocation);\n getLocations().then(setListOfHospitals);\n getConceptAnswers(config.sampleStatusConceptUUID).then(\n setSampleStatusAnswers\n );\n getConceptAnswers(config.referralStatusConceptUUID).then(\n setReferralStatusAnswers\n );\n getEncounters(\n config.healthCenterAttrTypeUUID,\n config.pathologyFullAllowedLocationUUID\n ).then(setEncountersList);\n }, []);\n\n const filteredEncList = encountersList\n .filter(\n (encList) =>\n !sampleStatus ||\n encList.sampleStatusObs?.toLowerCase() == sampleStatus.toLowerCase()\n )\n .filter(\n (encList) =>\n !referralStatus ||\n encList.referralStatusObs?.toLowerCase() == referralStatus.toLowerCase()\n )\n .filter(\n (encList) =>\n !sendingHospital ||\n encList.patientHealthCenter?.toLowerCase() ==\n sendingHospital.toLowerCase()\n )\n .filter((encList) => {\n if (!patientName) {\n return true;\n } else {\n // Given a patient name filter input, break it up into tokens.\n // Filter to patients for which each token matches.\n // Matching is case-insensitive and matches the beginning of each name.\n const nameTokens = patientName.split(/\\s+/);\n const name = `${encList.family_name} ${encList.middle_name} ${encList.given_name}`;\n return nameTokens.every((token) =>\n new RegExp(\"\\\\b\" + token, \"i\").test(name)\n );\n }\n });\n //replace(/\\s+/g, '');\n // const rows = filteredEncList.map(\n // (encounterInfo) => {\n // return {\n // // patientLink: <a href={`/openmrs/patientDashboard.form?patientId=${encounterInfo.personId}`} >Link</a>,\n // ...\n\n const rows = filteredEncList.map((encounterInfo) => {\n return {\n // rows.push({\n // patientLink: <a href={`/openmrs/patientDashboard.form?patientId=${encounterInfo.personId}`} >Link</a>,\n id: encounterInfo.encounterId,\n patientNames: (\n <a\n data-testid=\"patientNames\"\n href={`/openmrs/patientDashboard.form?patientId=${encounterInfo.personId}`}\n >\n {encounterInfo.family_name}\n {\" \"}\n {encounterInfo.given_name}\n {\" \"}\n {encounterInfo.middle_name}\n </a>\n ),\n pathologyRequest: (\n <a\n href={`/openmrs/module/htmlformentry/htmlFormEntry.form?encounterId=${encounterInfo.encounterId}&mode=VIEW`}\n >\n {\" \"}\n Link{\" \"}\n </a>\n ),\n sendingHospital: encounterInfo.patientHealthCenter,\n phoneNumber: encounterInfo.patientPhoneNumber || \"\",\n sampleStatus: (\n <select\n onChange={(e) =>\n sampleStatusChange(\n {\n uuid: e.target.value,\n display: e.target.options[e.target.selectedIndex].text,\n },\n encounterInfo\n )\n }\n >\n <option value=\"\"></option>\n {sampleStatusAnswers.map((ans) => (\n <option\n data-testid=\"sampleStatus-option\"\n value={ans.uuid}\n key={ans.uuid}\n selected={\n encounterInfo.sampleStatusObs\n ? encounterInfo.sampleStatusObs === ans.display && true\n : false\n }\n >\n {ans.display}\n </option>\n ))}\n </select>\n ),\n dateOfRequest: encounterInfo.encounterDatetime,\n referralStatus: (\n <select\n onChange={(e) =>\n referralStatusChange(\n {\n uuid: e.target.value,\n display: e.target.options[e.target.selectedIndex].text,\n },\n encounterInfo\n )\n }\n >\n <option data-testid=\"referralStatus-option\" value=\"\"></option>\n {referralStatusAnswers.map((ans) => (\n <option\n value={ans.uuid}\n key={ans.uuid}\n selected={\n encounterInfo.referralStatusObs &&\n encounterInfo.referralStatusObs === ans.display\n }\n >\n {ans.display}\n </option>\n ))}\n </select>\n ),\n sampleDropOff: (\n <input\n data-testid=\"sampleDropOff\"\n type=\"checkbox\"\n checked={Boolean(encounterInfo.sampleDropoffObs)}\n onChange={(e) => sampleDropOffChange(encounterInfo)}\n />\n ),\n resultsEncounter: encounterInfo.resultsEncounterId ? (\n <a\n data-testid=\"resultsEncounter\"\n href={`/openmrs/module/htmlformentry/htmlFormEntry.form?encounterId=${encounterInfo.resultsEncounterId}&mode=VIEW`}\n >\n {\" \"}\n Results{\" \"}\n </a>\n ) : (\n !userLocation && (\n <a\n href={`/openmrs/module/htmlformentry/htmlFormEntry.form?personId=${encounterInfo.personId}&patientId=${encounterInfo.personId}&returnUrl=&formId=${config.pathologyResultsFromID}&uuid=${encounterInfo.encounterUuid}`}\n >\n {\" \"}\n Fill in results{\" \"}\n </a>\n )\n ),\n };\n });\n\n const sampleDropOffChange = (encounterInfo) => {\n const tempEncList = cloneDeep(encountersList);\n if (!encounterInfo.sampleDropoffObs) {\n postSampleDropoffObs(\n encounterInfo,\n config.sampleDropOffconceptUUID,\n config.healthCenterAttrTypeUUID,\n config.yesConceptUUID\n ).then((response) => {\n if (response.ok) {\n const encIndex = tempEncList.findIndex(\n (enc) => enc.encounterUuid == encounterInfo.encounterUuid\n );\n tempEncList[encIndex].sampleDropoffObs = config.yesConceptName;\n tempEncList[encIndex].sampleDropoffObsUuid = response.data.uuid;\n setEncountersList(tempEncList);\n }\n });\n } else {\n voidSampleDropoff(encounterInfo.sampleDropoffObsUuid).then((response) => {\n if (response.ok) {\n const encIndex = tempEncList.findIndex(\n (enc) => enc.encounterUuid == encounterInfo.encounterUuid\n );\n tempEncList[encIndex].sampleDropoffObs = \"\";\n tempEncList[encIndex].sampleDropoffObsUuid = \"\";\n\n setEncountersList(tempEncList);\n }\n });\n }\n };\n\n const sampleStatusChange = (\n newStatus: { uuid: string; display: string },\n encounterInfo\n ) => {\n const tempEncList = cloneDeep(encountersList);\n if (!encounterInfo.sampleStatusObs) {\n postSampleStatusChangeObs(\n newStatus.uuid,\n encounterInfo,\n config.sampleStatusConceptUUID,\n config.healthCenterAttrTypeUUID\n ).then((response) => {\n if (response.ok) {\n const encIndex = tempEncList.findIndex(\n (enc) => enc.encounterUuid == encounterInfo.encounterUuid\n );\n tempEncList[encIndex].sampleStatusObs = newStatus.display;\n tempEncList[encIndex].sampleStatusObsUuid = response.data.uuid;\n\n setEncountersList(tempEncList);\n } else {\n setEncountersList(tempEncList);\n //Need error message\n }\n });\n } else {\n updateSampleStatusChangeObs(\n newStatus,\n encounterInfo,\n config.sampleStatusConceptUUID,\n config.healthCenterAttrTypeUUID\n ).then((response) => {\n if (response.ok) {\n const encIndex = tempEncList.findIndex(\n (enc) => enc.encounterUuid == encounterInfo.encounterUuid\n );\n tempEncList[encIndex].sampleStatusObs = newStatus.display;\n tempEncList[encIndex].sampleStatusObsUuid = response.data.uuid;\n setEncountersList(tempEncList);\n } else {\n setEncountersList(tempEncList);\n //Need error message\n }\n });\n }\n };\n\n const referralStatusChange = (targetedElem, encounterInfo) => {\n const tempEncList = cloneDeep(encountersList);\n if (!encounterInfo.referralStatusObs) {\n postReferralStatusChangeObs(\n targetedElem.uuid,\n encounterInfo,\n config.referralStatusConceptUUID,\n config.healthCenterAttrTypeUUID\n ).then((response) => {\n if (response.ok) {\n const encIndex = tempEncList.findIndex(\n (enc) => enc.encounterUuid == encounterInfo.encounterUuid\n );\n tempEncList[encIndex].referralStatusObs = targetedElem.display;\n tempEncList[encIndex].referralStatusObsUuid = response.data.uuid;\n setEncountersList(tempEncList);\n } else {\n setEncountersList(tempEncList);\n //Need error message\n }\n });\n } else {\n updateReferralStatusChangeObs(\n targetedElem,\n encounterInfo,\n config.referralStatusConceptUUID,\n config.healthCenterAttrTypeUUID\n ).then((response) => {\n if (response.ok) {\n const encIndex = tempEncList.findIndex(\n (enc) => enc.encounterUuid == encounterInfo.encounterUuid\n );\n tempEncList[encIndex].referralStatusObs = targetedElem.display;\n tempEncList[encIndex].referralStatusObsUuid = response.data.uuid;\n setEncountersList(tempEncList);\n } else {\n setEncountersList(tempEncList);\n //Need error message\n }\n });\n }\n };\n\n return (\n <div>\n <div className={styles.filtersContainer}>\n <label htmlFor=\"sending-hospital\">Sending Hospital </label>\n <select\n id=\"sending-hospital\"\n className={styles.dropdown}\n value={sendingHospital}\n onChange={(e) => setSendingHospital(e.target.value)}\n >\n <option value=\"\"></option>\n {listOfHospitals.map((loc) =>\n userLocation &&\n userLocation !== config.pathologyFullAllowedLocationUUID ? (\n loc.uuid === userLocation ? (\n <option value={loc.display} key={loc.uuid}>\n {loc.display}\n </option>\n ) : null\n ) : (\n <option value={loc.display} key={loc.uuid}>\n {loc.display}\n </option>\n )\n )}\n </select>\n <label htmlFor=\"sample-status\">Sample Status </label>\n <select\n id=\"sample-status\"\n className={styles.dropdown}\n value={sampleStatus}\n onChange={(e) => setSampleStatus(e.target.value)}\n >\n <option value=\"\"></option>\n {sampleStatusAnswers.map((ans) => (\n <option value={ans.display} key={ans.uuid}>\n {ans.display}\n </option>\n ))}\n </select>\n <label htmlFor=\"referral-status\">Referral Status </label>\n <select\n id=\"referral-status\"\n className={styles.dropdown}\n value={referralStatus}\n onChange={(e) => setReferralStatus(e.target.value)}\n >\n <option value=\"\"></option>\n {referralStatusAnswers.map((ans) => (\n <option value={ans.display} key={ans.uuid}>\n {ans.display}\n </option>\n ))}\n </select>\n\n <label htmlFor=\"patient-name\">Patient Name </label>\n <input\n id=\"patient-name\"\n className={styles.textBox}\n type=\"text\"\n onChange={(e) => setPatientName(e.target.value)}\n />\n </div>\n <div className={styles.tableContainer}>\n <DataTable rows={rows} headers={headers}>\n {({ rows, headers, getTableProps, getHeaderProps, getRowProps }) => (\n <Table {...getTableProps()}>\n <TableHead>\n <TableRow>\n {headers.map((header) => (\n <TableHeader {...getHeaderProps({ header })}>\n {header.header}\n </TableHeader>\n ))}\n </TableRow>\n </TableHead>\n <TableBody>\n {rows.map((row) => (\n <TableRow {...getRowProps({ row })}>\n {row.cells.map((cell) => (\n <TableCell key={cell.id}>{cell.value}</TableCell>\n ))}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n )}\n </DataTable>\n </div>\n </div>\n );\n};\n\nexport default ReportComponent;\n","import React from \"react\";\nimport styles from \"./pathology.css\";\nimport ReportComponent from \"./pathology-report/ReportComponent\";\n\nconst PathologySystem = () => {\n return (\n <div className={`omrs-main-content ${styles.container}`}>\n <ReportComponent />\n </div>\n );\n};\nexport default PathologySystem;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-pathology__ReportComponent__tableContainer___YHJce {\\n height: 500px;\\n overflow-x: auto;\\n margin: 0 1rem;\\n border: 2px solid lightgrey;\\n border-radius: 0.25rem;\\n}\\n\\n.-esm-pathology__ReportComponent__filtersContainer___6OaUS {\\n border-radius: 0.25rem;\\n margin: 0 1rem;\\n padding-top: 4%;\\n}\\n\\n.-esm-pathology__ReportComponent__dropdown___3u271 {\\n width: 10%;\\n height: 2rem;\\n background: transparent;\\n border: 1px solid var(--omrs-color-ink-lowest-contrast);\\n background-clip: padding-box;\\n border-radius: 4px;\\n margin: 1rem;\\n}\\n.-esm-pathology__ReportComponent__dropdown___3u271:disabled {\\n opacity: 0.8;\\n background: lightgrey;\\n cursor: not-allowed;\\n}\\n.-esm-pathology__ReportComponent__dropdown___3u271:focus {\\n border: 2px solid var(--omrs-color-interaction);\\n outline: 0;\\n}\\n.-esm-pathology__ReportComponent__textBox___17N1_ {\\n background: transparent;\\n border: 1px solid var(--omrs-color-ink-lowest-contrast);\\n background-clip: padding-box;\\n border-radius: 4px;\\n margin: 1rem;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/pathology-report/ReportComponent.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,aAAa;EACb,gBAAgB;EAChB,cAAc;EACd,2BAA2B;EAC3B,sBAAsB;AACxB;;AAEA;EACE,sBAAsB;EACtB,cAAc;EACd,eAAe;AACjB;;AAEA;EACE,UAAU;EACV,YAAY;EACZ,uBAAuB;EACvB,uDAAuD;EACvD,4BAA4B;EAC5B,kBAAkB;EAClB,YAAY;AACd;AACA;EACE,YAAY;EACZ,qBAAqB;EACrB,mBAAmB;AACrB;AACA;EACE,+CAA+C;EAC/C,UAAU;AACZ;AACA;EACE,uBAAuB;EACvB,uDAAuD;EACvD,4BAA4B;EAC5B,kBAAkB;EAClB,YAAY;AACd\",\"sourcesContent\":[\".tableContainer {\\n height: 500px;\\n overflow-x: auto;\\n margin: 0 1rem;\\n border: 2px solid lightgrey;\\n border-radius: 0.25rem;\\n}\\n\\n.filtersContainer {\\n border-radius: 0.25rem;\\n margin: 0 1rem;\\n padding-top: 4%;\\n}\\n\\n.dropdown {\\n width: 10%;\\n height: 2rem;\\n background: transparent;\\n border: 1px solid var(--omrs-color-ink-lowest-contrast);\\n background-clip: padding-box;\\n border-radius: 4px;\\n margin: 1rem;\\n}\\n.dropdown:disabled {\\n opacity: 0.8;\\n background: lightgrey;\\n cursor: not-allowed;\\n}\\n.dropdown:focus {\\n border: 2px solid var(--omrs-color-interaction);\\n outline: 0;\\n}\\n.textBox {\\n background: transparent;\\n border: 1px solid var(--omrs-color-ink-lowest-contrast);\\n background-clip: padding-box;\\n border-radius: 4px;\\n margin: 1rem;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"tableContainer\": \"-esm-pathology__ReportComponent__tableContainer___YHJce\",\n\t\"filtersContainer\": \"-esm-pathology__ReportComponent__filtersContainer___6OaUS\",\n\t\"dropdown\": \"-esm-pathology__ReportComponent__dropdown___3u271\",\n\t\"textBox\": \"-esm-pathology__ReportComponent__textBox___17N1_\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".-esm-pathology__pathology__container___3OaBf {\\n padding: 2em;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/pathology.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,YAAY;AACd\",\"sourcesContent\":[\".container {\\n padding: 2em;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n___CSS_LOADER_EXPORT___.locals = {\n\t\"container\": \"-esm-pathology__pathology__container___3OaBf\"\n};\nexport default ___CSS_LOADER_EXPORT___;\n"],"names":["options","async","getUserLocation","healthCenterAttrTypeUUID","personUuid","openmrsFetch","data","user","person","uuid","results","filter","attr","attributeType","value","getConceptAnswers","conceptUuid","answers","config","useConfig","userLocation","setUserLocation","React","encountersList","setEncountersList","sendingHospital","setSendingHospital","listOfHospitals","setListOfHospitals","sampleStatusAnswers","setSampleStatusAnswers","referralStatusAnswers","setReferralStatusAnswers","sampleStatus","setSampleStatus","referralStatus","setReferralStatus","patientName","setPatientName","then","getLocations","sampleStatusConceptUUID","referralStatusConceptUUID","pathologyFullAllowedLocationUUID","userLocationUUID","searchEncounter","dataSets","rows","getEncounters","encList","sampleStatusObs","toLowerCase","referralStatusObs","patientHealthCenter","nameTokens","split","name","family_name","middle_name","given_name","every","token","RegExp","test","map","encounterInfo","id","encounterId","patientNames","href","personId","pathologyRequest","phoneNumber","patientPhoneNumber","onChange","e","sampleStatusChange","target","display","selectedIndex","text","ans","key","selected","dateOfRequest","encounterDatetime","referralStatusChange","sampleDropOff","type","checked","Boolean","sampleDropoffObs","sampleDropOffChange","resultsEncounter","resultsEncounterId","pathologyResultsFromID","encounterUuid","tempEncList","cloneDeep","sampleDropoffObsUuid","method","headers","body","voided","voidSampleDropoff","response","ok","encIndex","findIndex","enc","obsObject","sampleDropOffconceptUUID","yesConceptName","ObsObjectTocreate","patientUuid","obsDatetime","Date","toISOString","concept","location","encounter","postSampleDropoffObs","yesConceptUUID","newStatus","sampleStatusObsUuid","updateSampleStatusChangeObs","newStatusUuid","obs","postBody","postSampleStatusChangeObs","targetedElem","targetValue","referralStatusObsUuid","updateReferralStatusChangeObs","targetValueUuid","postReferralStatusChangeObs","className","styles","htmlFor","loc","DataTable","header","getTableProps","getHeaderProps","getRowProps","Table","TableHead","TableRow","TableHeader","TableBody","row","cells","cell","TableCell","___CSS_LOADER_EXPORT___","push","module","locals"],"sourceRoot":""}
|