@openmrs/esm-patient-programs-app 8.0.2-pre.4929 → 8.0.2-pre.4951
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/.turbo/turbo-build.log +10 -11
- package/dist/234.js +1 -1
- package/dist/234.js.map +1 -1
- package/dist/461.js +1 -0
- package/dist/461.js.map +1 -0
- package/dist/574.js +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/openmrs-esm-patient-programs-app.js +1 -1
- package/dist/openmrs-esm-patient-programs-app.js.buildmanifest.json +32 -32
- package/dist/routes.json +1 -1
- package/package.json +3 -3
- package/src/dashboard.meta.ts +0 -2
- package/src/programs/programs-form.test.tsx +48 -65
- package/src/programs/programs-form.workspace.tsx +17 -26
- package/src/programs/programs.resource.tsx +4 -4
- package/src/types/index.ts +4 -4
- package/translations/en.json +1 -1
- package/dist/610.js +0 -1
- package/dist/610.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
var _openmrs_esm_patient_programs_app;(()=>{"use strict";var e,r,t,n,o,a,i,l,s,u,p,f,d,h,m,c={1342:(e,r,t)=>{var n={"./start":()=>Promise.all([t.e(255),t.e(731),t.e(268),t.e(325),t.e(868),t.e(
|
|
1
|
+
var _openmrs_esm_patient_programs_app;(()=>{"use strict";var e,r,t,n,o,a,i,l,s,u,p,f,d,h,m,c={1342:(e,r,t)=>{var n={"./start":()=>Promise.all([t.e(255),t.e(731),t.e(268),t.e(325),t.e(868),t.e(461)]).then((()=>()=>t(7461)))},o=(e,r)=>(t.R=r,r=t.o(n,e)?n[e]():Promise.resolve().then((()=>{throw new Error('Module "'+e+'" does not exist in container.')})),t.R=void 0,r),a=(e,r)=>{if(t.S){var n="default",o=t.S[n];if(o&&o!==e)throw new Error("Container initialization failed as it has already been initialized with a different share scope");return t.S[n]=e,t.I(n,r)}};t.d(r,{get:()=>o,init:()=>a})}},v={};function g(e){var r=v[e];if(void 0!==r)return r.exports;var t=v[e]={id:e,loaded:!1,exports:{}};return c[e].call(t.exports,t,t.exports,g),t.loaded=!0,t.exports}g.m=c,g.c=v,g.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return g.d(r,{a:r}),r},g.d=(e,r)=>{for(var t in r)g.o(r,t)&&!g.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},g.f={},g.e=e=>Promise.all(Object.keys(g.f).reduce(((r,t)=>(g.f[t](e,r),r)),[])),g.u=e=>e+".js",g.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),g.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),e={},r="@openmrs/esm-patient-programs-app:",g.l=(t,n,o,a)=>{if(e[t])e[t].push(n);else{var i,l;if(void 0!==o)for(var s=document.getElementsByTagName("script"),u=0;u<s.length;u++){var p=s[u];if(p.getAttribute("src")==t||p.getAttribute("data-webpack")==r+o){i=p;break}}i||(l=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,g.nc&&i.setAttribute("nonce",g.nc),i.setAttribute("data-webpack",r+o),i.src=t),e[t]=[n];var f=(r,n)=>{i.onerror=i.onload=null,clearTimeout(d);var o=e[t];if(delete e[t],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach((e=>e(n))),r)return r(n)},d=setTimeout(f.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=f.bind(null,i.onerror),i.onload=f.bind(null,i.onload),l&&document.head.appendChild(i)}},g.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},g.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{g.S={};var e={},r={};g.I=(t,n)=>{n||(n=[]);var o=r[t];if(o||(o=r[t]={}),!(n.indexOf(o)>=0)){if(n.push(o),e[t])return e[t];g.o(g.S,t)||(g.S[t]={});var a=g.S[t],i="@openmrs/esm-patient-programs-app",l=(e,r,t,n)=>{var o=a[e]=a[e]||{},l=o[r];(!l||!l.loaded&&(!n!=!l.eager?n:i>l.from))&&(o[r]={get:t,from:i,eager:!!n})},s=[];return"default"===t&&(l("@openmrs/esm-framework","5.6.1-pre.2043",(()=>Promise.all([g.e(130),g.e(268)]).then((()=>()=>g(130))))),l("@openmrs/esm-patient-common-lib","8.0.2-pre.4951",(()=>Promise.all([g.e(255),g.e(731),g.e(268),g.e(325),g.e(793),g.e(868)]).then((()=>()=>g(4793))))),l("dayjs","1.11.11",(()=>g.e(879).then((()=>()=>g(8879))))),l("react-i18next","11.18.6",(()=>Promise.all([g.e(443),g.e(268)]).then((()=>()=>g(443))))),l("react-router-dom","6.16.0",(()=>Promise.all([g.e(591),g.e(268)]).then((()=>()=>g(6591))))),l("react","18.3.1",(()=>g.e(784).then((()=>()=>g(2784))))),l("swr/_internal","2.2.4",(()=>Promise.all([g.e(729),g.e(268)]).then((()=>()=>g(4729))))),l("swr/immutable","2.2.4",(()=>Promise.all([g.e(255),g.e(268),g.e(325),g.e(303)]).then((()=>()=>g(2303)))))),e[t]=s.length?Promise.all(s).then((()=>e[t]=1)):1}}})(),(()=>{var e;g.g.importScripts&&(e=g.g.location+"");var r=g.g.document;if(!e&&r&&(r.currentScript&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var n=t.length-1;n>-1&&!e;)e=t[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),g.p=e})(),t=e=>{var r=e=>e.split(".").map((e=>+e==e?+e:e)),t=/^([^-+]+)?(?:-([^+]+))?(?:\+(.+))?$/.exec(e),n=t[1]?r(t[1]):[];return t[2]&&(n.length++,n.push.apply(n,r(t[2]))),t[3]&&(n.push([]),n.push.apply(n,r(t[3]))),n},n=(e,r)=>{e=t(e),r=t(r);for(var n=0;;){if(n>=e.length)return n<r.length&&"u"!=(typeof r[n])[0];var o=e[n],a=(typeof o)[0];if(n>=r.length)return"u"==a;var i=r[n],l=(typeof i)[0];if(a!=l)return"o"==a&&"n"==l||"s"==l||"u"==a;if("o"!=a&&"u"!=a&&o!=i)return o<i;n++}},o=e=>{var r=e[0],t="";if(1===e.length)return"*";if(r+.5){t+=0==r?">=":-1==r?"<":1==r?"^":2==r?"~":r>0?"=":"!=";for(var n=1,a=1;a<e.length;a++)n--,t+="u"==(typeof(l=e[a]))[0]?"-":(n>0?".":"")+(n=2,l);return t}var i=[];for(a=1;a<e.length;a++){var l=e[a];i.push(0===l?"not("+s()+")":1===l?"("+s()+" || "+s()+")":2===l?i.pop()+" "+i.pop():o(l))}return s();function s(){return i.pop().replace(/^\((.+)\)$/,"$1")}},a=(e,r)=>{if(0 in e){r=t(r);var n=e[0],o=n<0;o&&(n=-n-1);for(var i=0,l=1,s=!0;;l++,i++){var u,p,f=l<e.length?(typeof e[l])[0]:"";if(i>=r.length||"o"==(p=(typeof(u=r[i]))[0]))return!s||("u"==f?l>n&&!o:""==f!=o);if("u"==p){if(!s||"u"!=f)return!1}else if(s)if(f==p)if(l<=n){if(u!=e[l])return!1}else{if(o?u>e[l]:u<e[l])return!1;u!=e[l]&&(s=!1)}else if("s"!=f&&"n"!=f){if(o||l<=n)return!1;s=!1,l--}else{if(l<=n||p<f!=o)return!1;s=!1}else"s"!=f&&"n"!=f&&(s=!1,l--)}}var d=[],h=d.pop.bind(d);for(i=1;i<e.length;i++){var m=e[i];d.push(1==m?h()|h():2==m?h()&h():m?a(m,r):!h())}return!!h()},i=(e,r)=>{var t=e[r];return Object.keys(t).reduce(((e,r)=>!e||!t[e].loaded&&n(e,r)?r:e),0)},l=(e,r,t,n)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+o(n)+")",s=(e,r,t,n)=>{var o=i(e,t);return a(n,o)||u(l(e,t,o,n)),p(e[t][o])},u=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},p=e=>(e.loaded=1,e.get()),f=(e=>function(r,t,n,o){var a=g.I(r);return a&&a.then?a.then(e.bind(e,r,g.S[r],t,n,o)):e(0,g.S[r],t,n,o)})(((e,r,t,n,o)=>r&&g.o(r,t)?s(r,0,t,n):o())),d={},h={268:()=>f("default","react",[1,18],(()=>g.e(784).then((()=>()=>g(2784))))),3325:()=>f("default","swr/_internal",[1,2],(()=>g.e(729).then((()=>()=>g(4729))))),8744:()=>f("default","react-router-dom",[1,6],(()=>g.e(591).then((()=>()=>g(6591))))),9198:()=>f("default","swr/immutable",[1,2],(()=>g.e(152).then((()=>()=>g(2303))))),884:()=>f("default","@openmrs/esm-patient-common-lib",[1,8],(()=>g.e(793).then((()=>()=>g(4793))))),2870:()=>f("default","@openmrs/esm-framework",[1,5],(()=>g.e(130).then((()=>()=>g(130))))),4924:()=>f("default","react-i18next",[1,11],(()=>g.e(443).then((()=>()=>g(443))))),3565:()=>f("default","dayjs",[1,1],(()=>g.e(879).then((()=>()=>g(8879)))))},m={234:[3565],268:[268],325:[3325],793:[8744,9198],868:[884,2870,4924]},g.f.consumes=(e,r)=>{g.o(m,e)&&m[e].forEach((e=>{if(g.o(d,e))return r.push(d[e]);var t=r=>{d[e]=0,g.m[e]=t=>{delete g.c[e],t.exports=r()}},n=r=>{delete d[e],g.m[e]=t=>{throw delete g.c[e],r}};try{var o=h[e]();o.then?r.push(d[e]=o.then(t).catch(n)):t(o)}catch(e){n(e)}}))},(()=>{var e={55:0};g.f.j=(r,t)=>{var n=g.o(e,r)?e[r]:void 0;if(0!==n)if(n)t.push(n[2]);else if(/^([28]68|325)$/.test(r))e[r]=0;else{var o=new Promise(((t,o)=>n=e[r]=[t,o]));t.push(n[2]=o);var a=g.p+g.u(r),i=new Error;g.l(a,(t=>{if(g.o(e,r)&&(0!==(n=e[r])&&(e[r]=void 0),n)){var o=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;i.message="Loading chunk "+r+" failed.\n("+o+": "+a+")",i.name="ChunkLoadError",i.type=o,i.request=a,n[1](i)}}),"chunk-"+r,r)}};var r=(r,t)=>{var n,o,[a,i,l]=t,s=0;if(a.some((r=>0!==e[r]))){for(n in i)g.o(i,n)&&(g.m[n]=i[n]);l&&l(g)}for(r&&r(t);s<a.length;s++)o=a[s],g.o(e,o)&&e[o]&&e[o][0](),e[o]=0},t=globalThis.webpackChunk_openmrs_esm_patient_programs_app=globalThis.webpackChunk_openmrs_esm_patient_programs_app||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),g.nc=void 0;var b=g(1342);_openmrs_esm_patient_programs_app=b})();
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"auxiliaryFiles": [
|
|
25
25
|
"openmrs-esm-patient-programs-app.js.map"
|
|
26
26
|
],
|
|
27
|
-
"hash": "
|
|
27
|
+
"hash": "4f6d4ec317c019c0",
|
|
28
28
|
"childrenByOrder": {}
|
|
29
29
|
},
|
|
30
30
|
{
|
|
@@ -83,10 +83,10 @@
|
|
|
83
83
|
"initial": true,
|
|
84
84
|
"entry": true,
|
|
85
85
|
"recorded": false,
|
|
86
|
-
"size":
|
|
86
|
+
"size": 2208398,
|
|
87
87
|
"sizes": {
|
|
88
88
|
"consume-shared": 210,
|
|
89
|
-
"javascript":
|
|
89
|
+
"javascript": 2186555,
|
|
90
90
|
"share-init": 336,
|
|
91
91
|
"runtime": 21297
|
|
92
92
|
},
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
"auxiliaryFiles": [
|
|
104
104
|
"main.js.map"
|
|
105
105
|
],
|
|
106
|
-
"hash": "
|
|
106
|
+
"hash": "f83716fcdc5ea7e1",
|
|
107
107
|
"childrenByOrder": {}
|
|
108
108
|
},
|
|
109
109
|
{
|
|
@@ -111,9 +111,9 @@
|
|
|
111
111
|
"initial": false,
|
|
112
112
|
"entry": false,
|
|
113
113
|
"recorded": false,
|
|
114
|
-
"size":
|
|
114
|
+
"size": 27620,
|
|
115
115
|
"sizes": {
|
|
116
|
-
"javascript":
|
|
116
|
+
"javascript": 27578,
|
|
117
117
|
"consume-shared": 42
|
|
118
118
|
},
|
|
119
119
|
"names": [],
|
|
@@ -128,7 +128,7 @@
|
|
|
128
128
|
"auxiliaryFiles": [
|
|
129
129
|
"234.js.map"
|
|
130
130
|
],
|
|
131
|
-
"hash": "
|
|
131
|
+
"hash": "bdb1fb64931f6ad0",
|
|
132
132
|
"childrenByOrder": {}
|
|
133
133
|
},
|
|
134
134
|
{
|
|
@@ -322,21 +322,22 @@
|
|
|
322
322
|
"initial": false,
|
|
323
323
|
"entry": false,
|
|
324
324
|
"recorded": false,
|
|
325
|
-
"size":
|
|
325
|
+
"size": 46393,
|
|
326
326
|
"sizes": {
|
|
327
|
-
"javascript":
|
|
327
|
+
"javascript": 46393
|
|
328
328
|
},
|
|
329
329
|
"names": [],
|
|
330
330
|
"idHints": [],
|
|
331
331
|
"runtime": [
|
|
332
|
-
"@openmrs/esm-patient-programs-app"
|
|
333
|
-
"main"
|
|
332
|
+
"@openmrs/esm-patient-programs-app"
|
|
334
333
|
],
|
|
335
334
|
"files": [
|
|
336
|
-
"
|
|
335
|
+
"461.js"
|
|
337
336
|
],
|
|
338
|
-
"auxiliaryFiles": [
|
|
339
|
-
|
|
337
|
+
"auxiliaryFiles": [
|
|
338
|
+
"461.js.map"
|
|
339
|
+
],
|
|
340
|
+
"hash": "c7c95ac85d04bae0",
|
|
340
341
|
"childrenByOrder": {}
|
|
341
342
|
},
|
|
342
343
|
{
|
|
@@ -344,26 +345,21 @@
|
|
|
344
345
|
"initial": false,
|
|
345
346
|
"entry": false,
|
|
346
347
|
"recorded": false,
|
|
347
|
-
"
|
|
348
|
-
"size": 251616,
|
|
348
|
+
"size": 1263,
|
|
349
349
|
"sizes": {
|
|
350
|
-
"javascript":
|
|
350
|
+
"javascript": 1263
|
|
351
351
|
},
|
|
352
352
|
"names": [],
|
|
353
|
-
"idHints": [
|
|
354
|
-
"vendors"
|
|
355
|
-
],
|
|
353
|
+
"idHints": [],
|
|
356
354
|
"runtime": [
|
|
357
355
|
"@openmrs/esm-patient-programs-app",
|
|
358
356
|
"main"
|
|
359
357
|
],
|
|
360
358
|
"files": [
|
|
361
|
-
"
|
|
362
|
-
],
|
|
363
|
-
"auxiliaryFiles": [
|
|
364
|
-
"591.js.map"
|
|
359
|
+
"574.js"
|
|
365
360
|
],
|
|
366
|
-
"
|
|
361
|
+
"auxiliaryFiles": [],
|
|
362
|
+
"hash": "00ad9a78d012b72d",
|
|
367
363
|
"childrenByOrder": {}
|
|
368
364
|
},
|
|
369
365
|
{
|
|
@@ -371,22 +367,26 @@
|
|
|
371
367
|
"initial": false,
|
|
372
368
|
"entry": false,
|
|
373
369
|
"recorded": false,
|
|
374
|
-
"
|
|
370
|
+
"reason": "reused as split chunk (cache group: defaultVendors)",
|
|
371
|
+
"size": 251616,
|
|
375
372
|
"sizes": {
|
|
376
|
-
"javascript":
|
|
373
|
+
"javascript": 251616
|
|
377
374
|
},
|
|
378
375
|
"names": [],
|
|
379
|
-
"idHints": [
|
|
376
|
+
"idHints": [
|
|
377
|
+
"vendors"
|
|
378
|
+
],
|
|
380
379
|
"runtime": [
|
|
381
|
-
"@openmrs/esm-patient-programs-app"
|
|
380
|
+
"@openmrs/esm-patient-programs-app",
|
|
381
|
+
"main"
|
|
382
382
|
],
|
|
383
383
|
"files": [
|
|
384
|
-
"
|
|
384
|
+
"591.js"
|
|
385
385
|
],
|
|
386
386
|
"auxiliaryFiles": [
|
|
387
|
-
"
|
|
387
|
+
"591.js.map"
|
|
388
388
|
],
|
|
389
|
-
"hash": "
|
|
389
|
+
"hash": "b72af9509e77ddec",
|
|
390
390
|
"childrenByOrder": {}
|
|
391
391
|
},
|
|
392
392
|
{
|
package/dist/routes.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"webservices.rest":"^2.2.0"},"extensions":[{"name":"programs-overview-widget","component":"programsOverview","meta":{"columnSpan":4},"order":6},{"name":"programs-details-widget","slot":"patient-chart-programs-dashboard-slot","component":"programsDetailedSummary","meta":{"columnSpan":1},"order":6},{"name":"programs-summary-dashboard","slot":"patient-chart-dashboard-slot","component":"programsDashboardLink","meta":{"slot":"patient-chart-programs-dashboard-slot","columns":1,"path":"Programs"},"order":10}],"pages":[],"workspaces":[{"name":"programs-form-workspace","title":"programEnrollmentWorkspaceTitle","component":"programsFormWorkspace"}],"version":"8.0.2-pre.
|
|
1
|
+
{"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"webservices.rest":"^2.2.0"},"extensions":[{"name":"programs-overview-widget","component":"programsOverview","meta":{"columnSpan":4},"order":6},{"name":"programs-details-widget","slot":"patient-chart-programs-dashboard-slot","component":"programsDetailedSummary","meta":{"columnSpan":1},"order":6},{"name":"programs-summary-dashboard","slot":"patient-chart-dashboard-slot","component":"programsDashboardLink","meta":{"slot":"patient-chart-programs-dashboard-slot","columns":1,"path":"Programs"},"order":10}],"pages":[],"workspaces":[{"name":"programs-form-workspace","title":"programEnrollmentWorkspaceTitle","component":"programsFormWorkspace"}],"version":"8.0.2-pre.4951"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openmrs/esm-patient-programs-app",
|
|
3
|
-
"version": "8.0.2-pre.
|
|
3
|
+
"version": "8.0.2-pre.4951",
|
|
4
4
|
"license": "MPL-2.0",
|
|
5
5
|
"description": "Patient programs microfrontend for the OpenMRS SPA",
|
|
6
6
|
"browser": "dist/openmrs-esm-patient-programs-app.js",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@carbon/react": "^1.12.0",
|
|
41
|
-
"@openmrs/esm-patient-common-lib": "^8.0.2-pre.
|
|
41
|
+
"@openmrs/esm-patient-common-lib": "^8.0.2-pre.4951",
|
|
42
42
|
"lodash-es": "^4.17.21"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"swr": "2.x"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@openmrs/esm-patient-common-lib": "8.0.2-pre.
|
|
55
|
+
"@openmrs/esm-patient-common-lib": "8.0.2-pre.4951",
|
|
56
56
|
"webpack": "^5.88.2"
|
|
57
57
|
},
|
|
58
58
|
"stableVersion": "8.0.1"
|
package/src/dashboard.meta.ts
CHANGED
|
@@ -1,17 +1,26 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import userEvent from '@testing-library/user-event';
|
|
3
3
|
import { render, screen } from '@testing-library/react';
|
|
4
|
-
import {
|
|
5
|
-
import { mockPatient } from 'tools';
|
|
4
|
+
import { type FetchResponse, showSnackbar } from '@openmrs/esm-framework';
|
|
6
5
|
import { mockCareProgramsResponse, mockEnrolledProgramsResponse, mockLocationsResponse } from '__mocks__';
|
|
7
|
-
import {
|
|
6
|
+
import { mockPatient } from 'tools';
|
|
7
|
+
import {
|
|
8
|
+
createProgramEnrollment,
|
|
9
|
+
updateProgramEnrollment,
|
|
10
|
+
useAvailablePrograms,
|
|
11
|
+
useEnrollments,
|
|
12
|
+
} from './programs.resource';
|
|
8
13
|
import ProgramsForm from './programs-form.workspace';
|
|
9
14
|
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
15
|
+
const mockUseAvailablePrograms = jest.mocked(useAvailablePrograms);
|
|
16
|
+
const mockUseEnrollments = jest.mocked(useEnrollments);
|
|
17
|
+
const mockCreateProgramEnrollment = jest.mocked(createProgramEnrollment);
|
|
18
|
+
const mockUpdateProgramEnrollment = jest.mocked(updateProgramEnrollment);
|
|
19
|
+
const mockShowSnackbar = jest.mocked(showSnackbar);
|
|
20
|
+
|
|
21
|
+
const mockCloseWorkspace = jest.fn();
|
|
14
22
|
const mockCloseWorkspaceWithSavedChanges = jest.fn();
|
|
23
|
+
const mockPromptBeforeClosing = jest.fn();
|
|
15
24
|
|
|
16
25
|
jest.mock('@openmrs/esm-framework', () => ({
|
|
17
26
|
...jest.requireActual('@openmrs/esm-framework'),
|
|
@@ -20,20 +29,36 @@ jest.mock('@openmrs/esm-framework', () => ({
|
|
|
20
29
|
}));
|
|
21
30
|
|
|
22
31
|
jest.mock('./programs.resource', () => ({
|
|
23
|
-
...jest.requireActual('./programs.resource'),
|
|
24
32
|
createProgramEnrollment: jest.fn(),
|
|
25
33
|
updateProgramEnrollment: jest.fn(),
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
isLoading: false,
|
|
29
|
-
isError: false,
|
|
30
|
-
mutateEnrollments: jest.fn().mockResolvedValue(undefined),
|
|
31
|
-
}),
|
|
34
|
+
useAvailablePrograms: jest.fn(),
|
|
35
|
+
useEnrollments: jest.fn(),
|
|
32
36
|
}));
|
|
33
37
|
|
|
34
38
|
describe('ProgramsForm', () => {
|
|
35
39
|
beforeEach(() => {
|
|
36
40
|
jest.clearAllMocks();
|
|
41
|
+
|
|
42
|
+
mockUseAvailablePrograms.mockReturnValue({
|
|
43
|
+
data: mockCareProgramsResponse,
|
|
44
|
+
eligiblePrograms: [],
|
|
45
|
+
error: null,
|
|
46
|
+
isLoading: false,
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
mockUseEnrollments.mockReturnValue({
|
|
50
|
+
data: mockEnrolledProgramsResponse,
|
|
51
|
+
error: null,
|
|
52
|
+
isLoading: false,
|
|
53
|
+
isValidating: false,
|
|
54
|
+
activeEnrollments: [],
|
|
55
|
+
mutateEnrollments: jest.fn(),
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
mockCreateProgramEnrollment.mockResolvedValue({
|
|
59
|
+
status: 201,
|
|
60
|
+
statusText: 'Created',
|
|
61
|
+
} as unknown as FetchResponse);
|
|
37
62
|
});
|
|
38
63
|
|
|
39
64
|
it('renders a success toast notification upon successfully recording a program enrollment', async () => {
|
|
@@ -42,10 +67,6 @@ describe('ProgramsForm', () => {
|
|
|
42
67
|
const inpatientWardUuid = 'b1a8b05e-3542-4037-bbd3-998ee9c40574';
|
|
43
68
|
const oncologyScreeningProgramUuid = '11b129ca-a5e7-4025-84bf-b92a173e20de';
|
|
44
69
|
|
|
45
|
-
mockOpenmrsFetch.mockReturnValueOnce({ data: { results: mockCareProgramsResponse } });
|
|
46
|
-
mockOpenmrsFetch.mockReturnValueOnce({ data: { results: mockEnrolledProgramsResponse } });
|
|
47
|
-
mockCreateProgramEnrollment.mockResolvedValueOnce({ status: 201, statusText: 'Created' });
|
|
48
|
-
|
|
49
70
|
renderProgramsForm();
|
|
50
71
|
|
|
51
72
|
const programNameInput = screen.getByRole('combobox', { name: /program name/i });
|
|
@@ -54,12 +75,11 @@ describe('ProgramsForm', () => {
|
|
|
54
75
|
const enrollButton = screen.getByRole('button', { name: /save and close/i });
|
|
55
76
|
|
|
56
77
|
await user.click(enrollButton);
|
|
57
|
-
expect(screen.getByText(/
|
|
78
|
+
expect(screen.getByText(/program is required/i)).toBeInTheDocument();
|
|
58
79
|
|
|
59
80
|
await user.type(enrollmentDateInput, '2020-05-05');
|
|
60
81
|
await user.selectOptions(programNameInput, [oncologyScreeningProgramUuid]);
|
|
61
82
|
await user.selectOptions(enrollmentLocationInput, [inpatientWardUuid]);
|
|
62
|
-
|
|
63
83
|
expect(screen.getByRole('option', { name: /Inpatient Ward/i })).toBeInTheDocument();
|
|
64
84
|
|
|
65
85
|
await user.click(enrollButton);
|
|
@@ -92,7 +112,10 @@ describe('ProgramsForm', () => {
|
|
|
92
112
|
const enrollButton = screen.getByRole('button', { name: /save and close/i });
|
|
93
113
|
const completionDateInput = screen.getByRole('textbox', { name: /date completed/i });
|
|
94
114
|
|
|
95
|
-
mockUpdateProgramEnrollment.
|
|
115
|
+
mockUpdateProgramEnrollment.mockResolvedValue({
|
|
116
|
+
status: 200,
|
|
117
|
+
statusText: 'OK',
|
|
118
|
+
} as unknown as FetchResponse);
|
|
96
119
|
|
|
97
120
|
await user.type(completionDateInput, '05/05/2020');
|
|
98
121
|
await user.tab();
|
|
@@ -102,8 +125,8 @@ describe('ProgramsForm', () => {
|
|
|
102
125
|
expect(mockUpdateProgramEnrollment).toHaveBeenCalledWith(
|
|
103
126
|
mockEnrolledProgramsResponse[0].uuid,
|
|
104
127
|
expect.objectContaining({
|
|
105
|
-
|
|
106
|
-
|
|
128
|
+
dateCompleted: expect.stringMatching(/^2020-05-05/),
|
|
129
|
+
dateEnrolled: expect.stringMatching(/^2020-01-16/),
|
|
107
130
|
location: mockEnrolledProgramsResponse[0].location.uuid,
|
|
108
131
|
patient: mockPatient.id,
|
|
109
132
|
program: mockEnrolledProgramsResponse[0].program.uuid,
|
|
@@ -119,54 +142,14 @@ describe('ProgramsForm', () => {
|
|
|
119
142
|
}),
|
|
120
143
|
);
|
|
121
144
|
});
|
|
122
|
-
|
|
123
|
-
it('renders an error notification if there was a problem recording a program enrollment', async () => {
|
|
124
|
-
const user = userEvent.setup();
|
|
125
|
-
|
|
126
|
-
const inpatientWardUuid = 'b1a8b05e-3542-4037-bbd3-998ee9c40574';
|
|
127
|
-
const oncologyScreeningProgramUuid = '11b129ca-a5e7-4025-84bf-b92a173e20de';
|
|
128
|
-
|
|
129
|
-
const error = {
|
|
130
|
-
message: 'Internal Server Error',
|
|
131
|
-
response: {
|
|
132
|
-
status: 500,
|
|
133
|
-
statusText: 'Internal Server Error',
|
|
134
|
-
},
|
|
135
|
-
};
|
|
136
|
-
|
|
137
|
-
mockOpenmrsFetch.mockReturnValue({ data: { results: mockCareProgramsResponse } });
|
|
138
|
-
mockOpenmrsFetch.mockReturnValue({ data: { results: mockEnrolledProgramsResponse } });
|
|
139
|
-
mockCreateProgramEnrollment.mockRejectedValueOnce(error);
|
|
140
|
-
|
|
141
|
-
renderProgramsForm();
|
|
142
|
-
|
|
143
|
-
const programNameInput = screen.getByRole('combobox', { name: /program name/i });
|
|
144
|
-
const enrollmentDateInput = screen.getByRole('textbox', { name: /date enrolled/i });
|
|
145
|
-
const enrollmentLocationInput = screen.getByRole('combobox', { name: /enrollment location/i });
|
|
146
|
-
const enrollButton = screen.getByRole('button', { name: /save and close/i });
|
|
147
|
-
|
|
148
|
-
await user.type(enrollmentDateInput, '2020-05-05');
|
|
149
|
-
await user.selectOptions(programNameInput, [oncologyScreeningProgramUuid]);
|
|
150
|
-
await user.selectOptions(enrollmentLocationInput, [inpatientWardUuid]);
|
|
151
|
-
|
|
152
|
-
expect(enrollButton).toBeEnabled();
|
|
153
|
-
|
|
154
|
-
await user.click(enrollButton);
|
|
155
|
-
|
|
156
|
-
expect(mockShowSnackbar).toHaveBeenCalledWith({
|
|
157
|
-
subtitle: 'An unknown error occurred',
|
|
158
|
-
kind: 'error',
|
|
159
|
-
title: 'Error saving program enrollment',
|
|
160
|
-
});
|
|
161
|
-
});
|
|
162
145
|
});
|
|
163
146
|
|
|
164
147
|
function renderProgramsForm(programEnrollmentUuidToEdit?: string) {
|
|
165
148
|
const testProps = {
|
|
166
|
-
closeWorkspace:
|
|
149
|
+
closeWorkspace: mockCloseWorkspace,
|
|
167
150
|
closeWorkspaceWithSavedChanges: mockCloseWorkspaceWithSavedChanges,
|
|
168
151
|
patientUuid: mockPatient.id,
|
|
169
|
-
promptBeforeClosing:
|
|
152
|
+
promptBeforeClosing: mockPromptBeforeClosing,
|
|
170
153
|
setTitle: jest.fn(),
|
|
171
154
|
};
|
|
172
155
|
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import React, { useCallback, useEffect, useState } from 'react';
|
|
2
|
-
import { useTranslation } from 'react-i18next';
|
|
1
|
+
import React, { useCallback, useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import { type TFunction, useTranslation } from 'react-i18next';
|
|
3
3
|
import dayjs from 'dayjs';
|
|
4
4
|
import filter from 'lodash-es/filter';
|
|
5
|
+
import includes from 'lodash-es/includes';
|
|
6
|
+
import map from 'lodash-es/map';
|
|
5
7
|
import {
|
|
6
8
|
Button,
|
|
7
9
|
ButtonSet,
|
|
@@ -19,14 +21,7 @@ import {
|
|
|
19
21
|
import { z } from 'zod';
|
|
20
22
|
import { useForm, Controller } from 'react-hook-form';
|
|
21
23
|
import { zodResolver } from '@hookform/resolvers/zod';
|
|
22
|
-
import {
|
|
23
|
-
parseDate,
|
|
24
|
-
showSnackbar,
|
|
25
|
-
translateFrom,
|
|
26
|
-
useLayoutType,
|
|
27
|
-
useLocations,
|
|
28
|
-
useSession,
|
|
29
|
-
} from '@openmrs/esm-framework';
|
|
24
|
+
import { parseDate, showSnackbar, useLayoutType, useLocations, useSession } from '@openmrs/esm-framework';
|
|
30
25
|
import { type DefaultPatientWorkspaceProps } from '@openmrs/esm-patient-common-lib';
|
|
31
26
|
import {
|
|
32
27
|
createProgramEnrollment,
|
|
@@ -34,23 +29,21 @@ import {
|
|
|
34
29
|
useEnrollments,
|
|
35
30
|
updateProgramEnrollment,
|
|
36
31
|
} from './programs.resource';
|
|
37
|
-
import { moduleName } from '../dashboard.meta';
|
|
38
32
|
import styles from './programs-form.scss';
|
|
39
33
|
|
|
40
34
|
interface ProgramsFormProps extends DefaultPatientWorkspaceProps {
|
|
41
35
|
programEnrollmentId?: string;
|
|
42
36
|
}
|
|
43
37
|
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
.string()
|
|
47
|
-
.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
});
|
|
38
|
+
const createProgramsFormSchema = (t: TFunction) =>
|
|
39
|
+
z.object({
|
|
40
|
+
selectedProgram: z.string().refine((value) => !!value, t('programRequired', 'Program is required')),
|
|
41
|
+
enrollmentDate: z.date(),
|
|
42
|
+
completionDate: z.date().nullable(),
|
|
43
|
+
enrollmentLocation: z.string(),
|
|
44
|
+
});
|
|
52
45
|
|
|
53
|
-
export type ProgramsFormData = z.infer<typeof
|
|
46
|
+
export type ProgramsFormData = z.infer<ReturnType<typeof createProgramsFormSchema>>;
|
|
54
47
|
|
|
55
48
|
const ProgramsForm: React.FC<ProgramsFormProps> = ({
|
|
56
49
|
closeWorkspace,
|
|
@@ -67,6 +60,8 @@ const ProgramsForm: React.FC<ProgramsFormProps> = ({
|
|
|
67
60
|
const { data: enrollments, mutateEnrollments } = useEnrollments(patientUuid);
|
|
68
61
|
const [isSubmittingForm, setIsSubmittingForm] = useState(false);
|
|
69
62
|
|
|
63
|
+
const programsFormSchema = useMemo(() => createProgramsFormSchema(t), [t]);
|
|
64
|
+
|
|
70
65
|
const currentEnrollment = programEnrollmentId && enrollments.filter((e) => e.uuid === programEnrollmentId)[0];
|
|
71
66
|
const currentProgram = currentEnrollment
|
|
72
67
|
? {
|
|
@@ -77,11 +72,7 @@ const ProgramsForm: React.FC<ProgramsFormProps> = ({
|
|
|
77
72
|
|
|
78
73
|
const eligiblePrograms = currentProgram
|
|
79
74
|
? [currentProgram]
|
|
80
|
-
: filter(availablePrograms, (program) =>
|
|
81
|
-
const existingEnrollment = enrollments.find((e) => e.program.uuid === program.uuid);
|
|
82
|
-
|
|
83
|
-
return !existingEnrollment || existingEnrollment.dateCompleted !== null;
|
|
84
|
-
});
|
|
75
|
+
: filter(availablePrograms, (program) => !includes(map(enrollments, 'program.uuid'), program.uuid));
|
|
85
76
|
|
|
86
77
|
const getLocationUuid = () => {
|
|
87
78
|
if (!currentEnrollment?.location.uuid && session?.sessionLocation?.uuid) {
|
|
@@ -165,7 +156,7 @@ const ProgramsForm: React.FC<ProgramsFormProps> = ({
|
|
|
165
156
|
<Select
|
|
166
157
|
aria-label="program name"
|
|
167
158
|
id="program"
|
|
168
|
-
|
|
159
|
+
invalid={!!fieldState?.error}
|
|
169
160
|
labelText={t('programName', 'Program name')}
|
|
170
161
|
onChange={(event) => onChange(event.target.value)}
|
|
171
162
|
value={value}
|
|
@@ -24,7 +24,7 @@ export function useEnrollments(patientUuid: string) {
|
|
|
24
24
|
|
|
25
25
|
return {
|
|
26
26
|
data: data ? uniqBy(formattedEnrollments, (program) => program?.program?.uuid) : null,
|
|
27
|
-
|
|
27
|
+
error,
|
|
28
28
|
isLoading,
|
|
29
29
|
isValidating,
|
|
30
30
|
activeEnrollments,
|
|
@@ -47,7 +47,7 @@ export function useAvailablePrograms(enrollments?: Array<PatientProgram>) {
|
|
|
47
47
|
|
|
48
48
|
return {
|
|
49
49
|
data: availablePrograms,
|
|
50
|
-
|
|
50
|
+
error,
|
|
51
51
|
isLoading,
|
|
52
52
|
eligiblePrograms,
|
|
53
53
|
};
|
|
@@ -72,7 +72,7 @@ export function updateProgramEnrollment(programEnrollmentUuid: string, payload,
|
|
|
72
72
|
if (!payload && !payload.program) {
|
|
73
73
|
return null;
|
|
74
74
|
}
|
|
75
|
-
const {
|
|
75
|
+
const { dateEnrolled, dateCompleted, location } = payload;
|
|
76
76
|
return openmrsFetch(`${restBaseUrl}/programenrollment/${programEnrollmentUuid}`, {
|
|
77
77
|
method: 'POST',
|
|
78
78
|
headers: {
|
|
@@ -86,7 +86,7 @@ export function updateProgramEnrollment(programEnrollmentUuid: string, payload,
|
|
|
86
86
|
export const usePrograms = (patientUuid: string) => {
|
|
87
87
|
const {
|
|
88
88
|
data: enrollments,
|
|
89
|
-
|
|
89
|
+
error: enrollError,
|
|
90
90
|
isLoading: enrolLoading,
|
|
91
91
|
isValidating,
|
|
92
92
|
activeEnrollments,
|
package/src/types/index.ts
CHANGED
|
@@ -15,11 +15,11 @@ export interface PatientProgram {
|
|
|
15
15
|
states: Array<{}>;
|
|
16
16
|
links?: Links;
|
|
17
17
|
}>;
|
|
18
|
-
concept
|
|
18
|
+
concept?: {
|
|
19
19
|
display: string;
|
|
20
20
|
uuid: string;
|
|
21
21
|
};
|
|
22
|
-
links
|
|
22
|
+
links?: Links;
|
|
23
23
|
};
|
|
24
24
|
display: string;
|
|
25
25
|
dateEnrolled: string;
|
|
@@ -27,12 +27,12 @@ export interface PatientProgram {
|
|
|
27
27
|
location?: {
|
|
28
28
|
uuid: string;
|
|
29
29
|
display: string;
|
|
30
|
-
links
|
|
30
|
+
links?: Links;
|
|
31
31
|
};
|
|
32
32
|
voided?: boolean;
|
|
33
33
|
outcome?: null;
|
|
34
34
|
states?: [];
|
|
35
|
-
links
|
|
35
|
+
links?: Links;
|
|
36
36
|
resourceVersion?: string;
|
|
37
37
|
}
|
|
38
38
|
|
package/translations/en.json
CHANGED
|
@@ -25,9 +25,9 @@
|
|
|
25
25
|
"programEnrollmentSaveError": "Error saving program enrollment",
|
|
26
26
|
"programEnrollmentWorkspaceTitle": "Record program enrollment",
|
|
27
27
|
"programName": "Program name",
|
|
28
|
+
"programRequired": "Program is required",
|
|
28
29
|
"programs": "Program enrollments",
|
|
29
30
|
"Programs": "Programs",
|
|
30
|
-
"required": "Required",
|
|
31
31
|
"saveAndClose": "Save and close",
|
|
32
32
|
"saving": "Saving",
|
|
33
33
|
"seeAll": "See all",
|
package/dist/610.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(globalThis.webpackChunk_openmrs_esm_patient_programs_app=globalThis.webpackChunk_openmrs_esm_patient_programs_app||[]).push([[610],{5351:(e,r,t)=>{"use strict";t.d(r,{Z:()=>i});var n=t(272),a=t.n(n),o=t(2609),l=t.n(o)()(a());l.push([e.id,":root{--brand-01: #005d5d;--brand-02: #004144;--brand-03: #007d79;--bottom-nav-height: 4rem;--workspace-header-height: 3rem;--tablet-workspace-window-height: calc(100vh - var(--omrs-navbar-height) - var(--bottom-nav-height));--desktop-workspace-window-height: calc(100vh - var(--omrs-navbar-height) - var(--workspace-header-height))}.-esm-patient-programs__programs-detailed-summary__widgetCard___R5Btc{border:1px solid #e0e0e0;border-bottom:none}","",{version:3,sources:["webpack://./../../node_modules/@openmrs/esm-styleguide/src/_vars.scss","webpack://./src/programs/programs-detailed-summary.scss"],names:[],mappings:"AAoDA,MACE,mBAAA,CACA,mBAAA,CACA,mBAAA,CACA,yBAAA,CACA,+BAAA,CACA,oGAAA,CACA,2GAAA,CCzDF,sEACE,wBAAA,CACA,kBAAA",sourceRoot:""}]),l.locals={widgetCard:"-esm-patient-programs__programs-detailed-summary__widgetCard___R5Btc"};const i=l},6983:(e,r,t)=>{"use strict";t.d(r,{Z:()=>i});var n=t(272),a=t.n(n),o=t(2609),l=t.n(o)()(a());l.push([e.id,":root{--brand-01: #005d5d;--brand-02: #004144;--brand-03: #007d79;--bottom-nav-height: 4rem;--workspace-header-height: 3rem;--tablet-workspace-window-height: calc(100vh - var(--omrs-navbar-height) - var(--bottom-nav-height));--desktop-workspace-window-height: calc(100vh - var(--omrs-navbar-height) - var(--workspace-header-height))}.-esm-patient-programs__programs-overview__widgetCard___yEo1t{border:1px solid #e0e0e0}","",{version:3,sources:["webpack://./../../node_modules/@openmrs/esm-styleguide/src/_vars.scss","webpack://./src/programs/programs-overview.scss"],names:[],mappings:"AAoDA,MACE,mBAAA,CACA,mBAAA,CACA,mBAAA,CACA,yBAAA,CACA,+BAAA,CACA,oGAAA,CACA,2GAAA,CCzDF,8DACE,wBAAA",sourceRoot:""}]),l.locals={widgetCard:"-esm-patient-programs__programs-overview__widgetCard___yEo1t"};const i=l},2265:(e,r,t)=>{"use strict";t.d(r,{V:()=>a,e:()=>n});var n="@openmrs/esm-patient-programs-app",a={slot:"patient-chart-programs-dashboard-slot",columns:1,path:"Programs",title:"Programs"}},3610:(e,r,t)=>{"use strict";t.r(r),t.d(r,{importTranslation:()=>U,programsDashboardLink:()=>q,programsDetailedSummary:()=>$,programsFormWorkspace:()=>J,programsOverview:()=>G,startupApp:()=>V});var n=t(2870),a=t(884),o={hideAddProgramButton:{_type:n.Type.Boolean,_default:!1}},l=t(2265),i=t(268),s=t.n(i),c=t(2524),d=t.n(c),u=t(4924),m=t(9841),p=t(6759),g=t(9946),v=t(321),b=t.n(v),f=t(1195),h=t.n(f),y=t(3275),A=t.n(y),E=t(7162),w=t.n(E),C=t(2094),P=t.n(C),O=t(757),k=t.n(O),j=t(6983),_={};_.styleTagTransform=k(),_.setAttributes=w(),_.insert=A().bind(null,"head"),_.domAPI=h(),_.insertStyleElement=P(),b()(j.Z,_);const S=j.Z&&j.Z.locals?j.Z.locals:void 0;function D(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function Z(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(r){D(e,r,t[r])}))}return e}var T=t(7631),B=t(5351),L={};L.styleTagTransform=k(),L.setAttributes=w(),L.insert=A().bind(null,"head"),L.domAPI=h(),L.insertStyleElement=P(),b()(B.Z,L);const x=B.Z&&B.Z.locals?B.Z.locals:void 0;function z(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function I(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(r){z(e,r,t[r])}))}return e}function F(e){var r=e.programEnrollmentId,t=e.t,o="tablet"===(0,n.useLayoutType)(),l=(0,i.useCallback)((function(){return(0,a.launchPatientWorkspace)("programs-form-workspace",{programEnrollmentId:r})}),[r]);return s().createElement(m.zxk,{"aria-label":"edit program",kind:"ghost",renderIcon:function(e){return s().createElement(T.I8,I({size:16},e))},iconDescription:t("editProgram","Edit Program"),onClick:l,hasIconOnly:!0,tooltipPosition:"left",size:o?"lg":"sm"})}function H(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var N="@openmrs/esm-patient-programs-app",M={featureName:"patient-programs",moduleName:N},U=t(3979);function V(){(0,n.defineConfigSchema)(N,o)}var W,R,G=(0,n.getSyncLifecycle)((function(e){e.basePath;var r=e.patientUuid,t=(0,u.useTranslation)().t,o=(0,n.useConfig)(),l=t("programs","Program enrollments"),i=t("carePrograms","Care Programs"),c=t("seeAll","See all"),v="${openmrsSpaBase}/patient/".concat(r,"/chart/Programs"),b=(0,n.useLayoutType)(),f="tablet"===b,h=(0,n.isDesktop)(b),y=(0,g.b$)(r),A=y.activeEnrollments,E=y.availablePrograms,w=y.eligiblePrograms,C=y.enrollments,P=y.isError,O=y.isLoading,k=y.isValidating,j=(0,n.usePagination)(null!=C?C:[],5),_=j.results,D=j.goTo,T=j.currentPage,B=s().useCallback((function(){return(0,a.launchPatientWorkspace)("programs-form-workspace")}),[]),L=[{key:"display",header:t("activePrograms","Active programs")},{key:"location",header:t("location","Location")},{key:"dateEnrolled",header:t("dateEnrolled","Date enrolled")},{key:"status",header:t("status","Status")},{key:"actions",header:t("actions","Actions")}],x=s().useMemo((function(){return null==_?void 0:_.map((function(e){var r,a;return{id:e.uuid,display:e.display,location:null!==(a=null===(r=e.location)||void 0===r?void 0:r.display)&&void 0!==a?a:"--",dateEnrolled:e.dateEnrolled?(0,n.formatDatetime)(new Date(e.dateEnrolled)):"--",status:e.dateCompleted?"".concat(t("completedOn","Completed On")," ").concat((0,n.formatDate)(new Date(e.dateCompleted))):t("active","Active")}}))}),[_,t]);return O?s().createElement(m.gqd,{role:"progressbar",compact:h,zebra:!0}):P?s().createElement(a.ErrorState,{error:P,headerTitle:i}):(null==A?void 0:A.length)?s().createElement("div",{className:S.widgetCard},s().createElement(a.CardHeader,{title:i},s().createElement("span",null,k?s().createElement(m.lSo,null):null),o.hideAddProgramButton?null:s().createElement(m.zxk,{kind:"ghost",renderIcon:function(e){return s().createElement(p.mm,Z({size:16},e))},iconDescription:"Add programs",onClick:B,disabled:(null==E?void 0:E.length)&&0===(null==w?void 0:w.length)},t("add","Add"))),(null==E?void 0:E.length)&&0===(null==w?void 0:w.length)&&s().createElement(m.K0D,{style:{minWidth:"100%",margin:"0rem",padding:"0rem"},kind:"info",lowContrast:!0,subtitle:t("noEligibleEnrollments","There are no more programs left to enroll this patient in"),title:t("fullyEnrolled","Enrolled in all programs")}),s().createElement(m.wQF,{rows:x,headers:L,isSortable:!0,size:f?"lg":"sm",useZebraStyles:!0},(function(e){var r=e.rows,t=e.headers,n=e.getHeaderProps,a=e.getTableProps;return s().createElement(m.xJi,null,s().createElement(m.iA_,Z({"aria-label":"programs overview"},a()),s().createElement(m.ssF,null,s().createElement(m.SCH,null,t.map((function(e){var r,t;return s().createElement(m.xDH,Z({className:d()(S.productiveHeading01,S.text02)},n({header:e,isSortable:e.isSortable})),null!==(t=null===(r=e.header)||void 0===r?void 0:r.content)&&void 0!==t?t:e.header)})))),s().createElement(m.RMI,null,r.map((function(e){return s().createElement(m.SCH,{key:e.id},e.cells.map((function(e){var r,t;return s().createElement(m.pj1,{key:e.id},null!==(t=null===(r=e.value)||void 0===r?void 0:r.content)&&void 0!==t?t:e.value)})))})))))})),s().createElement(a.PatientChartPagination,{currentItems:_.length,onPageNumberChange:function(e){var r=e.page;return D(r)},pageNumber:T,pageSize:5,totalItems:null==C?void 0:C.length,dashboardLinkUrl:v,dashboardLinkLabel:c})):s().createElement(a.EmptyState,{displayText:l,headerTitle:i,launchForm:B})}),M),$=(0,n.getSyncLifecycle)((function(e){var r=e.patientUuid,t=(0,u.useTranslation)().t,o=(0,n.useConfig)().hideAddProgramButton,l=(0,n.useLayoutType)(),c="tablet"===l,v=(0,n.isDesktop)(l),b=t("programEnrollments","Program enrollments"),f=t("carePrograms","Care Programs"),h=(0,g.b$)(r),y=h.enrollments,A=h.isLoading,E=h.isError,w=h.isValidating,C=h.availablePrograms,P=(0,i.useMemo)((function(){return[{key:"display",header:t("activePrograms","Active programs")},{key:"location",header:t("location","Location")},{key:"dateEnrolled",header:t("dateEnrolled","Date enrolled")},{key:"status",header:t("status","Status")}]}),[t]),O=(0,i.useMemo)((function(){return null==y?void 0:y.map((function(e){var r,a;return{id:e.uuid,display:e.display,location:null!==(a=null===(r=e.location)||void 0===r?void 0:r.display)&&void 0!==a?a:"--",dateEnrolled:(0,n.formatDatetime)(new Date(e.dateEnrolled)),status:e.dateCompleted?"".concat(t("completedOn","Completed On")," ").concat((0,n.formatDate)(new Date(e.dateCompleted))):t("active","Active")}}))}),[y,t]),k=(0,i.useCallback)((function(){return(0,a.launchPatientWorkspace)("programs-form-workspace")}),[]),j=(0,i.useMemo)((function(){return!(!(null==C?void 0:C.length)||!(null==y?void 0:y.length))&&y.filter((function(e){return!e.dateCompleted})).length===C.length}),[C,y]);return A?s().createElement(m.gqd,{role:"progressbar",compact:v,zebra:!0}):E?s().createElement(a.ErrorState,{error:E,headerTitle:f}):(null==y?void 0:y.length)?s().createElement("div",{className:x.widgetCard},s().createElement(a.CardHeader,{title:f},s().createElement("span",null,w?s().createElement(m.lSo,null):null),o?null:s().createElement(m.zxk,{kind:"ghost",renderIcon:function(e){return s().createElement(p.mm,I({size:16},e))},iconDescription:t("addPrograms","Add programs"),onClick:k},t("add","Add"))),j&&s().createElement(m.K0D,{style:{minWidth:"100%",margin:"0rem",padding:"0rem"},lowContrast:!0,subtitle:t("noEligibleEnrollments","There are no more programs left to enroll this patient in"),title:t("fullyEnrolled","Enrolled in all programs")}),s().createElement(m.wQF,{rows:O,headers:P,isSortable:!0,size:c?"lg":"sm",useZebraStyles:!0},(function(e){var r=e.rows,n=e.headers,a=e.getHeaderProps,o=e.getTableProps;return s().createElement(m.xJi,null,s().createElement(m.iA_,I({"aria-label":"program enrollments"},o()),s().createElement(m.ssF,null,s().createElement(m.SCH,null,n.map((function(e){var r,t;return s().createElement(m.xDH,I({className:d()(x.productiveHeading01,x.text02)},a({header:e,isSortable:e.isSortable})),null!==(t=null===(r=e.header)||void 0===r?void 0:r.content)&&void 0!==t?t:e.header)})),s().createElement(m.xDH,null))),s().createElement(m.RMI,null,r.map((function(e,r){var n;return s().createElement(m.SCH,{key:e.id},e.cells.map((function(e){var r,t;return s().createElement(m.pj1,{key:e.id},null!==(t=null===(r=e.value)||void 0===r?void 0:r.content)&&void 0!==t?t:e.value)})),s().createElement(m.pj1,{className:"cds--table-column-menu"},s().createElement(F,{programEnrollmentId:null===(n=y[r])||void 0===n?void 0:n.uuid,t})))})))))}))):s().createElement(a.EmptyState,{displayText:b,headerTitle:f,launchForm:k})}),M),q=(0,n.getSyncLifecycle)((0,a.createDashboardLink)((W=function(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(r){H(e,r,t[r])}))}return e}({},l.V),R=null!=(R={moduleName:N})?R:{},Object.getOwnPropertyDescriptors?Object.defineProperties(W,Object.getOwnPropertyDescriptors(R)):function(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t}(Object(R)).forEach((function(e){Object.defineProperty(W,e,Object.getOwnPropertyDescriptor(R,e))})),W)),M),J=(0,n.getAsyncLifecycle)((function(){return Promise.all([t.e(940),t.e(234)]).then(t.bind(t,234))}),M)},9946:(e,r,t)=>{"use strict";t.d(r,{df:()=>k,YX:()=>j,oI:()=>O,Bw:()=>P,b$:()=>_});var n=t(3255),a=t(2870),o=t(4221),l=t(9626),i=t(7626),s=t(3282),c=t(8147),d=t(7885),u=t(3391);var m=t(6127),p=t(5598);var g=t(2198);const v=function(e){return null==e?[]:function(e,r){return(0,p.Z)(r,(function(r){return e[r]}))}(e,(0,g.Z)(e))};var b=Math.max;const f=function(e,r,t,n){e=(0,s.Z)(e)?e:v(e),t=t&&!n?(0,m.Z)(t):0;var a=e.length;return t<0&&(t=b(a+t,0)),function(e){return"string"==typeof e||!(0,d.Z)(e)&&(0,u.Z)(e)&&"[object String]"==(0,c.Z)(e)}(e)?t<=a&&e.indexOf(r,t)>-1:!!a&&(0,i.Z)(e,r,t)>-1};var h=t(9481),y=t(506);const A=function(e,r){var t=-1,n=(0,s.Z)(e)?Array(e.length):[];return(0,y.Z)(e,(function(e,a,o){n[++t]=r(e,a,o)})),n},E=function(e,r){return((0,d.Z)(e)?p.Z:A)(e,(0,h.Z)(r,3))};function w(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var C="custom:(uuid,display,program,dateEnrolled,dateCompleted,location:(uuid,display))";function P(e){var r,t="".concat(a.restBaseUrl,"/programenrollment?patient=").concat(e,"&v=").concat(C),l=(0,n.ZP)(e?t:null,a.openmrsFetch),i=l.data,s=l.error,c=l.isLoading,d=l.isValidating,u=l.mutate,m=(null==i||null===(r=i.data)||void 0===r?void 0:r.results.length)>0?null==i?void 0:i.data.results.sort((function(e,r){return r.dateEnrolled>e.dateEnrolled?1:-1})):null,p=null==m?void 0:m.filter((function(e){return!e.dateCompleted}));return{data:i?(0,o.Z)(m,(function(e){var r;return null==e||null===(r=e.program)||void 0===r?void 0:r.uuid})):null,isError:s,isLoading:c,isValidating:d,activeEnrollments:p,mutateEnrollments:u}}function O(e){var r,t,o=(0,n.ZP)("".concat(a.restBaseUrl,"/program?v=custom:(uuid,display,allWorkflows,concept:(uuid,display))"),a.openmrsFetch),i=o.data,s=o.error,c=o.isLoading,d=null!==(t=null==i||null===(r=i.data)||void 0===r?void 0:r.results)&&void 0!==t?t:null;return{data:d,isError:s,isLoading:c,eligiblePrograms:(0,l.Z)(d,(function(r){return!f(E(e,"program.uuid"),r.uuid)}))}}function k(e,r){if(!e)return null;var t=e.program,n=e.patient,o=e.dateEnrolled,l=e.dateCompleted,i=e.location;return(0,a.openmrsFetch)("".concat(a.restBaseUrl,"/programenrollment"),{method:"POST",headers:{"Content-Type":"application/json"},body:{program:t,patient:n,dateEnrolled:o,dateCompleted:l,location:i},signal:r.signal})}function j(e,r,t){if(!r&&!r.program)return null;r.program;var n=r.dateEnrolled,o=r.dateCompleted,l=r.location;return(0,a.openmrsFetch)("".concat(a.restBaseUrl,"/programenrollment/").concat(e),{method:"POST",headers:{"Content-Type":"application/json"},body:{dateEnrolled:n,dateCompleted:o,location:l},signal:t.signal})}var _=function(e){var r,t,n=P(e),a=n.data,o=n.isError,l=n.isLoading,i=n.isValidating,s=n.activeEnrollments,c=O(a),d=c.data,u=c.eligiblePrograms;return r=function(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{},n=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(t).filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})))),n.forEach((function(r){w(e,r,t[r])}))}return e}({enrollments:a},{isLoading:l,isError:o}),t=null!=(t={isValidating:i,activeEnrollments:s,availablePrograms:d,eligiblePrograms:u})?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(r,Object.getOwnPropertyDescriptors(t)):function(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t}(Object(t)).forEach((function(e){Object.defineProperty(r,e,Object.getOwnPropertyDescriptor(t,e))})),r}},3979:(e,r,t)=>{var n={"./am.json":[8788,788],"./ar.json":[4460,460],"./en.json":[3574,574],"./es.json":[8319,319],"./fr.json":[2757,757],"./he.json":[5833,833],"./km.json":[7807,807],"./zh.json":[8271,271],"./zh_CN.json":[1644,644]};function a(e){if(!t.o(n,e))return Promise.resolve().then((()=>{var r=new Error("Cannot find module '"+e+"'");throw r.code="MODULE_NOT_FOUND",r}));var r=n[e],a=r[0];return t.e(r[1]).then((()=>t(a)))}a.keys=()=>Object.keys(n),a.id=3979,e.exports=a},506:(e,r,t)=>{"use strict";t.d(r,{Z:()=>l});const n=function(e,r,t){for(var n=-1,a=Object(e),o=t(e),l=o.length;l--;){var i=o[++n];if(!1===r(a[i],i,a))break}return e};var a=t(2198);var o=t(3282);const l=(i=function(e,r){return e&&n(e,r,a.Z)},function(e,r){if(null==e)return e;if(!(0,o.Z)(e))return i(e,r);for(var t=e.length,n=-1,a=Object(e);++n<t&&!1!==r(a[n],n,a););return e});var i},9626:(e,r,t)=>{"use strict";t.d(r,{Z:()=>s});var n=t(2300),a=t(506);const o=function(e,r){var t=[];return(0,a.Z)(e,(function(e,n,a){r(e,n,a)&&t.push(e)})),t};var l=t(9481),i=t(7885);const s=function(e,r){return((0,i.Z)(e)?n.Z:o)(e,(0,l.Z)(r,3))}}}]);
|