@openmrs/esm-generic-patient-widgets-app 11.3.1-pre.9578 → 11.3.1-pre.9583
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 +3 -3
- package/dist/1936.js +1 -1
- package/dist/1936.js.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/openmrs-esm-generic-patient-widgets-app.js +1 -1
- package/dist/openmrs-esm-generic-patient-widgets-app.js.buildmanifest.json +7 -7
- package/dist/routes.json +1 -1
- package/package.json +2 -2
- package/src/obs-switchable/obs-switchable.test.tsx +29 -17
- package/src/obs-table/obs-table.component.tsx +14 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
var _openmrs_esm_generic_patient_widgets_app;(()=>{"use strict";var e,r,t,n,o,a,i,s,l,u,p,f,d,c,h,m,g,v,b,w,y,_={45684:(e,r,t)=>{var n={"./start":()=>Promise.all([t.e(2606),t.e(3204),t.e(5641),t.e(5434),t.e(8571),t.e(1936)]).then((()=>()=>t(61936)))},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})}},P={};function j(e){var r=P[e];if(void 0!==r)return r.exports;var t=P[e]={id:e,exports:{}};return _[e].call(t.exports,t,t.exports,j),t.exports}j.m=_,j.c=P,j.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return j.d(r,{a:r}),r},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,j.t=function(t,n){if(1&n&&(t=this(t)),8&n)return t;if("object"==typeof t&&t){if(4&n&&t.__esModule)return t;if(16&n&&"function"==typeof t.then)return t}var o=Object.create(null);j.r(o);var a={};e=e||[null,r({}),r([]),r(r)];for(var i=2&n&&t;"object"==typeof i&&!~e.indexOf(i);i=r(i))Object.getOwnPropertyNames(i).forEach((e=>a[e]=()=>t[e]));return a.default=()=>t,j.d(o,a),o},j.d=(e,r)=>{for(var t in r)j.o(r,t)&&!j.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},j.f={},j.e=e=>Promise.all(Object.keys(j.f).reduce(((r,t)=>(j.f[t](e,r),r)),[])),j.u=e=>e+".js",j.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),j.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t={},n="@openmrs/esm-generic-patient-widgets-app:",j.l=(e,r,o,a)=>{if(t[e])t[e].push(r);else{var i,s;if(void 0!==o)for(var l=document.getElementsByTagName("script"),u=0;u<l.length;u++){var p=l[u];if(p.getAttribute("src")==e||p.getAttribute("data-webpack")==n+o){i=p;break}}i||(s=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,j.nc&&i.setAttribute("nonce",j.nc),i.setAttribute("data-webpack",n+o),i.src=e),t[e]=[r];var f=(r,n)=>{i.onerror=i.onload=null,clearTimeout(d);var o=t[e];if(delete t[e],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),s&&document.head.appendChild(i)}},j.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{j.S={};var e={},r={};j.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];j.o(j.S,t)||(j.S[t]={});var a=j.S[t],i="@openmrs/esm-generic-patient-widgets-app",s=(e,r,t,n)=>{var o=a[e]=a[e]||{},s=o[r];(!s||!s.loaded&&(!n!=!s.eager?n:i>s.from))&&(o[r]={get:t,from:i,eager:!!n})},l=[];return"default"===t&&(s("@openmrs/esm-framework","8.0.1-pre.3605",(()=>Promise.all([j.e(6831),j.e(2606),j.e(5670),j.e(5641),j.e(5434),j.e(8382),j.e(8571)]).then((()=>()=>j(55670))))),s("@openmrs/esm-patient-common-lib","11.3.1-pre.
|
|
1
|
+
var _openmrs_esm_generic_patient_widgets_app;(()=>{"use strict";var e,r,t,n,o,a,i,s,l,u,p,f,d,c,h,m,g,v,b,w,y,_={45684:(e,r,t)=>{var n={"./start":()=>Promise.all([t.e(2606),t.e(3204),t.e(5641),t.e(5434),t.e(8571),t.e(1936)]).then((()=>()=>t(61936)))},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})}},P={};function j(e){var r=P[e];if(void 0!==r)return r.exports;var t=P[e]={id:e,exports:{}};return _[e].call(t.exports,t,t.exports,j),t.exports}j.m=_,j.c=P,j.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return j.d(r,{a:r}),r},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,j.t=function(t,n){if(1&n&&(t=this(t)),8&n)return t;if("object"==typeof t&&t){if(4&n&&t.__esModule)return t;if(16&n&&"function"==typeof t.then)return t}var o=Object.create(null);j.r(o);var a={};e=e||[null,r({}),r([]),r(r)];for(var i=2&n&&t;"object"==typeof i&&!~e.indexOf(i);i=r(i))Object.getOwnPropertyNames(i).forEach((e=>a[e]=()=>t[e]));return a.default=()=>t,j.d(o,a),o},j.d=(e,r)=>{for(var t in r)j.o(r,t)&&!j.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},j.f={},j.e=e=>Promise.all(Object.keys(j.f).reduce(((r,t)=>(j.f[t](e,r),r)),[])),j.u=e=>e+".js",j.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),j.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t={},n="@openmrs/esm-generic-patient-widgets-app:",j.l=(e,r,o,a)=>{if(t[e])t[e].push(r);else{var i,s;if(void 0!==o)for(var l=document.getElementsByTagName("script"),u=0;u<l.length;u++){var p=l[u];if(p.getAttribute("src")==e||p.getAttribute("data-webpack")==n+o){i=p;break}}i||(s=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,j.nc&&i.setAttribute("nonce",j.nc),i.setAttribute("data-webpack",n+o),i.src=e),t[e]=[r];var f=(r,n)=>{i.onerror=i.onload=null,clearTimeout(d);var o=t[e];if(delete t[e],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),s&&document.head.appendChild(i)}},j.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{j.S={};var e={},r={};j.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];j.o(j.S,t)||(j.S[t]={});var a=j.S[t],i="@openmrs/esm-generic-patient-widgets-app",s=(e,r,t,n)=>{var o=a[e]=a[e]||{},s=o[r];(!s||!s.loaded&&(!n!=!s.eager?n:i>s.from))&&(o[r]={get:t,from:i,eager:!!n})},l=[];return"default"===t&&(s("@openmrs/esm-framework","8.0.1-pre.3605",(()=>Promise.all([j.e(6831),j.e(2606),j.e(5670),j.e(5641),j.e(5434),j.e(8382),j.e(8571)]).then((()=>()=>j(55670))))),s("@openmrs/esm-patient-common-lib","11.3.1-pre.9583",(()=>Promise.all([j.e(6831),j.e(2606),j.e(5641),j.e(5434),j.e(8382),j.e(8571),j.e(4341)]).then((()=>()=>j(94341))))),s("dayjs","1.11.13",(()=>j.e(3464).then((()=>()=>j(23464))))),s("react-i18next","16.0.0",(()=>Promise.all([j.e(6336),j.e(5641)]).then((()=>()=>j(16336))))),s("react-router-dom","6.16.0",(()=>Promise.all([j.e(2913),j.e(5641)]).then((()=>()=>j(52913))))),s("react","18.3.1",(()=>j.e(4041).then((()=>()=>j(14041))))),s("rxjs","6.6.7",(()=>j.e(2457).then((()=>()=>j(82457))))),s("swr/_internal","2.2.5",(()=>Promise.all([j.e(2372),j.e(5641)]).then((()=>()=>j(42372))))),s("swr/immutable","2.2.5",(()=>Promise.all([j.e(5641),j.e(5434),j.e(7495)]).then((()=>()=>j(29876))))),s("swr/infinite","2.2.5",(()=>Promise.all([j.e(5641),j.e(5434),j.e(89)]).then((()=>()=>j(52470)))))),e[t]=l.length?Promise.all(l).then((()=>e[t]=1)):1}}})(),(()=>{var e;j.g.importScripts&&(e=j.g.location+"");var r=j.g.document;if(!e&&r&&(r.currentScript&&"SCRIPT"===r.currentScript.tagName.toUpperCase()&&(e=r.currentScript.src),!e)){var t=r.getElementsByTagName("script");if(t.length)for(var n=t.length-1;n>-1&&(!e||!/^http(s?):/.test(e));)e=t[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),j.p=e})(),o=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},a=(e,r)=>{e=o(e),r=o(r);for(var t=0;;){if(t>=e.length)return t<r.length&&"u"!=(typeof r[t])[0];var n=e[t],a=(typeof n)[0];if(t>=r.length)return"u"==a;var i=r[t],s=(typeof i)[0];if(a!=s)return"o"==a&&"n"==s||"s"==s||"u"==a;if("o"!=a&&"u"!=a&&n!=i)return n<i;t++}},i=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,o=1;o<e.length;o++)n--,t+="u"==(typeof(s=e[o]))[0]?"-":(n>0?".":"")+(n=2,s);return t}var a=[];for(o=1;o<e.length;o++){var s=e[o];a.push(0===s?"not("+l()+")":1===s?"("+l()+" || "+l()+")":2===s?a.pop()+" "+a.pop():i(s))}return l();function l(){return a.pop().replace(/^\((.+)\)$/,"$1")}},s=(e,r)=>{if(0 in e){r=o(r);var t=e[0],n=t<0;n&&(t=-t-1);for(var a=0,i=1,l=!0;;i++,a++){var u,p,f=i<e.length?(typeof e[i])[0]:"";if(a>=r.length||"o"==(p=(typeof(u=r[a]))[0]))return!l||("u"==f?i>t&&!n:""==f!=n);if("u"==p){if(!l||"u"!=f)return!1}else if(l)if(f==p)if(i<=t){if(u!=e[i])return!1}else{if(n?u>e[i]:u<e[i])return!1;u!=e[i]&&(l=!1)}else if("s"!=f&&"n"!=f){if(n||i<=t)return!1;l=!1,i--}else{if(i<=t||p<f!=n)return!1;l=!1}else"s"!=f&&"n"!=f&&(l=!1,i--)}}var d=[],c=d.pop.bind(d);for(a=1;a<e.length;a++){var h=e[a];d.push(1==h?c()|c():2==h?c()&c():h?s(h,r):!c())}return!!c()},l=(e,r)=>e&&j.o(e,r),u=e=>(e.loaded=1,e.get()),p=e=>Object.keys(e).reduce(((r,t)=>(e[t].eager&&(r[t]=e[t]),r)),{}),f=(e,r,t)=>{var n=t?p(e[r]):e[r];return Object.keys(n).reduce(((e,r)=>!e||!n[e].loaded&&a(e,r)?r:e),0)},d=(e,r,t,n)=>"Unsatisfied version "+t+" from "+(t&&e[r][t].from)+" of shared singleton module "+r+" (required "+i(n)+")",c=e=>{throw new Error(e)},h=e=>{"undefined"!=typeof console&&console.warn&&console.warn(e)},m=(e,r,t)=>t?t():((e,r)=>c("Shared module "+r+" doesn't exist in shared scope "+e))(e,r),g=(e=>function(r,t,n,o,a){var i=j.I(r);return i&&i.then&&!n?i.then(e.bind(e,r,j.S[r],t,!1,o,a)):e(r,j.S[r],t,n,o,a)})(((e,r,t,n,o,a)=>{if(!l(r,t))return m(e,t,a);var i=f(r,t,n);return s(o,i)||h(d(r,t,i,o)),u(r[t][i])})),v={},b={75641:()=>g("default","react",!1,[1,18,2,0],(()=>j.e(4041).then((()=>()=>j(14041))))),55434:()=>g("default","swr/_internal",!1,[1,2],(()=>j.e(2372).then((()=>()=>j(42372))))),8877:()=>g("default","react-router-dom",!1,[1,6],(()=>j.e(2913).then((()=>()=>j(52913))))),24818:()=>g("default","rxjs",!1,[1,6],(()=>j.e(2457).then((()=>()=>j(82457))))),46372:()=>g("default","dayjs",!1,[1,1],(()=>j.e(3464).then((()=>()=>j(23464))))),98394:()=>g("default","swr/infinite",!1,[1,2],(()=>j.e(2470).then((()=>()=>j(52470))))),54440:()=>g("default","@openmrs/esm-framework",!1,[1,8],(()=>Promise.all([j.e(6831),j.e(5670),j.e(8382)]).then((()=>()=>j(55670))))),72339:()=>g("default","react-i18next",!1,[1,16],(()=>j.e(6336).then((()=>()=>j(16336))))),88010:()=>g("default","swr/immutable",!1,[1,2],(()=>j.e(9876).then((()=>()=>j(29876))))),36274:()=>g("default","@openmrs/esm-patient-common-lib",!1,[1,11],(()=>Promise.all([j.e(6831),j.e(8382),j.e(4341)]).then((()=>()=>j(94341)))))},w={1936:[36274],5434:[55434],5641:[75641],8382:[8877,24818,46372,98394],8571:[54440,72339,88010]},y={},j.f.consumes=(e,r)=>{j.o(w,e)&&w[e].forEach((e=>{if(j.o(v,e))return r.push(v[e]);if(!y[e]){var t=r=>{v[e]=0,j.m[e]=t=>{delete j.c[e],t.exports=r()}};y[e]=!0;var n=r=>{delete v[e],j.m[e]=t=>{throw delete j.c[e],r}};try{var o=b[e]();o.then?r.push(v[e]=o.then(t).catch(n)):t(o)}catch(e){n(e)}}}))},(()=>{var e={3461:0};j.f.j=(r,t)=>{var n=j.o(e,r)?e[r]:void 0;if(0!==n)if(n)t.push(n[2]);else if(/^(5434|5641|8382|8571)$/.test(r))e[r]=0;else{var o=new Promise(((t,o)=>n=e[r]=[t,o]));t.push(n[2]=o);var a=j.p+j.u(r),i=new Error;j.l(a,(t=>{if(j.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,s]=t,l=0;if(a.some((r=>0!==e[r]))){for(n in i)j.o(i,n)&&(j.m[n]=i[n]);s&&s(j)}for(r&&r(t);l<a.length;l++)o=a[l],j.o(e,o)&&e[o]&&e[o][0](),e[o]=0},t=globalThis.webpackChunk_openmrs_esm_generic_patient_widgets_app=globalThis.webpackChunk_openmrs_esm_generic_patient_widgets_app||[];t.forEach(r.bind(null,0)),t.push=r.bind(null,t.push.bind(t))})(),j.nc=void 0;var S=j(45684);_openmrs_esm_generic_patient_widgets_app=S})();
|
|
@@ -183,9 +183,9 @@
|
|
|
183
183
|
"initial": false,
|
|
184
184
|
"entry": false,
|
|
185
185
|
"recorded": false,
|
|
186
|
-
"size":
|
|
186
|
+
"size": 183124,
|
|
187
187
|
"sizes": {
|
|
188
|
-
"javascript":
|
|
188
|
+
"javascript": 183082,
|
|
189
189
|
"consume-shared": 42
|
|
190
190
|
},
|
|
191
191
|
"names": [],
|
|
@@ -199,7 +199,7 @@
|
|
|
199
199
|
"auxiliaryFiles": [
|
|
200
200
|
"1936.js.map"
|
|
201
201
|
],
|
|
202
|
-
"hash": "
|
|
202
|
+
"hash": "42ce2614279c0016",
|
|
203
203
|
"childrenByOrder": {}
|
|
204
204
|
},
|
|
205
205
|
{
|
|
@@ -450,7 +450,7 @@
|
|
|
450
450
|
"auxiliaryFiles": [
|
|
451
451
|
"openmrs-esm-generic-patient-widgets-app.js.map"
|
|
452
452
|
],
|
|
453
|
-
"hash": "
|
|
453
|
+
"hash": "eaef2f65d4480455",
|
|
454
454
|
"childrenByOrder": {}
|
|
455
455
|
},
|
|
456
456
|
{
|
|
@@ -1270,10 +1270,10 @@
|
|
|
1270
1270
|
"initial": true,
|
|
1271
1271
|
"entry": true,
|
|
1272
1272
|
"recorded": false,
|
|
1273
|
-
"size":
|
|
1273
|
+
"size": 3814781,
|
|
1274
1274
|
"sizes": {
|
|
1275
1275
|
"consume-shared": 252,
|
|
1276
|
-
"javascript":
|
|
1276
|
+
"javascript": 3791418,
|
|
1277
1277
|
"share-init": 420,
|
|
1278
1278
|
"runtime": 22691
|
|
1279
1279
|
},
|
|
@@ -1290,7 +1290,7 @@
|
|
|
1290
1290
|
"auxiliaryFiles": [
|
|
1291
1291
|
"main.js.map"
|
|
1292
1292
|
],
|
|
1293
|
-
"hash": "
|
|
1293
|
+
"hash": "b2e83c2a7f89f8d5",
|
|
1294
1294
|
"childrenByOrder": {}
|
|
1295
1295
|
},
|
|
1296
1296
|
{
|
package/dist/routes.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"fhir2":">=1.2"},"extensions":[{"name":"obs-by-encounter-widget","component":"switchableObs","online":true,"offline":true,"meta":{"fullWidth":false}},{"name":"obs-table-horizontal-widget-small","component":"obsTableHorizontal","online":true,"offline":true,"meta":{"fullWidth":false}},{"name":"obs-table-horizontal-widget","component":"obsTableHorizontal","online":true,"offline":true,"meta":{"fullWidth":true}}],"version":"11.3.1-pre.
|
|
1
|
+
{"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"fhir2":">=1.2"},"extensions":[{"name":"obs-by-encounter-widget","component":"switchableObs","online":true,"offline":true,"meta":{"fullWidth":false}},{"name":"obs-table-horizontal-widget-small","component":"obsTableHorizontal","online":true,"offline":true,"meta":{"fullWidth":false}},{"name":"obs-table-horizontal-widget","component":"obsTableHorizontal","online":true,"offline":true,"meta":{"fullWidth":true}}],"version":"11.3.1-pre.9583"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openmrs/esm-generic-patient-widgets-app",
|
|
3
|
-
"version": "11.3.1-pre.
|
|
3
|
+
"version": "11.3.1-pre.9583",
|
|
4
4
|
"license": "MPL-2.0",
|
|
5
5
|
"description": "Generic widgets for the patient chart",
|
|
6
6
|
"browser": "dist/openmrs-esm-generic-patient-widgets-app.js",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"swr": "2.x"
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
|
-
"@openmrs/esm-patient-common-lib": "11.3.1-pre.
|
|
55
|
+
"@openmrs/esm-patient-common-lib": "11.3.1-pre.9583",
|
|
56
56
|
"webpack": "^5.99.9"
|
|
57
57
|
},
|
|
58
58
|
"stableVersion": "11.3.0"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { render, screen, waitFor } from '@testing-library/react';
|
|
3
3
|
import userEvent from '@testing-library/user-event';
|
|
4
4
|
import { LineChart } from '@carbon/charts-react';
|
|
5
5
|
import { getDefaultsFromConfigSchema, useConfig } from '@openmrs/esm-framework';
|
|
@@ -81,6 +81,15 @@ const mockEncounters = [
|
|
|
81
81
|
|
|
82
82
|
const mockUseObs = jest.mocked(useObs);
|
|
83
83
|
|
|
84
|
+
beforeEach(() => {
|
|
85
|
+
jest.clearAllMocks();
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
afterEach(async () => {
|
|
89
|
+
// Flush any pending setTimeout callbacks from handleSorting
|
|
90
|
+
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
91
|
+
});
|
|
92
|
+
|
|
84
93
|
describe('ObsSwitchable', () => {
|
|
85
94
|
it('should render all obs in table and numeric obs in graph', async () => {
|
|
86
95
|
mockUseObs.mockReturnValue({
|
|
@@ -210,24 +219,31 @@ describe('ObsSwitchable', () => {
|
|
|
210
219
|
|
|
211
220
|
const user = userEvent.setup();
|
|
212
221
|
|
|
222
|
+
// Initial state: newest first (Feb before Jan)
|
|
213
223
|
const firstRowInitial = screen.getAllByRole('row')[1];
|
|
214
224
|
expect(firstRowInitial).toHaveTextContent('01 — Feb — 2021');
|
|
215
225
|
const secondRowInitial = screen.getAllByRole('row')[2];
|
|
216
226
|
expect(secondRowInitial).toHaveTextContent('01 — Jan — 2021');
|
|
217
227
|
|
|
218
228
|
const dateHeader = screen.getByText('Date and time');
|
|
219
|
-
await user.click(dateHeader);
|
|
220
229
|
|
|
221
|
-
|
|
222
|
-
|
|
230
|
+
// First click: toggles to ASC (oldest first: Jan before Feb)
|
|
231
|
+
await user.click(dateHeader);
|
|
232
|
+
await waitFor(() => {
|
|
233
|
+
const firstRow = screen.getAllByRole('row')[1];
|
|
234
|
+
expect(firstRow).toHaveTextContent('01 — Jan — 2021');
|
|
235
|
+
});
|
|
223
236
|
const secondRow = screen.getAllByRole('row')[2];
|
|
224
|
-
expect(secondRow).toHaveTextContent('01 —
|
|
237
|
+
expect(secondRow).toHaveTextContent('01 — Feb — 2021');
|
|
225
238
|
|
|
239
|
+
// Second click: toggles back to DESC (newest first: Feb before Jan)
|
|
226
240
|
await user.click(dateHeader);
|
|
227
|
-
|
|
228
|
-
|
|
241
|
+
await waitFor(() => {
|
|
242
|
+
const firstRow2 = screen.getAllByRole('row')[1];
|
|
243
|
+
expect(firstRow2).toHaveTextContent('01 — Feb — 2021');
|
|
244
|
+
});
|
|
229
245
|
const secondRow2 = screen.getAllByRole('row')[2];
|
|
230
|
-
expect(secondRow2).toHaveTextContent('01 —
|
|
246
|
+
expect(secondRow2).toHaveTextContent('01 — Jan — 2021');
|
|
231
247
|
});
|
|
232
248
|
|
|
233
249
|
it('supports table sorting oldest to newest', async () => {
|
|
@@ -248,15 +264,11 @@ describe('ObsSwitchable', () => {
|
|
|
248
264
|
|
|
249
265
|
render(<ObsSwitchable patientUuid="123" />);
|
|
250
266
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
const firstRow = screen.getAllByRole('row')[1];
|
|
257
|
-
expect(firstRow).toHaveTextContent('01 — Jan — 2021');
|
|
258
|
-
const secondRow = screen.getAllByRole('row')[2];
|
|
259
|
-
expect(secondRow).toHaveTextContent('01 — Feb — 2021');
|
|
267
|
+
// Initial state with tableSortOldestFirst: oldest first (Jan before Feb)
|
|
268
|
+
const firstRowInitial = screen.getAllByRole('row')[1];
|
|
269
|
+
expect(firstRowInitial).toHaveTextContent('01 — Jan — 2021');
|
|
270
|
+
const secondRowInitial = screen.getAllByRole('row')[2];
|
|
271
|
+
expect(secondRowInitial).toHaveTextContent('01 — Feb — 2021');
|
|
260
272
|
});
|
|
261
273
|
|
|
262
274
|
it('should support showing graph tab by default', async () => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useMemo, useState, useCallback } from 'react';
|
|
1
|
+
import React, { useMemo, useState, useCallback, useRef, useEffect } from 'react';
|
|
2
2
|
import {
|
|
3
3
|
DataTable,
|
|
4
4
|
Table,
|
|
@@ -148,10 +148,22 @@ const ObsTable: React.FC<ObsTableProps> = ({ patientUuid }) => {
|
|
|
148
148
|
sortDirection: config.tableSortOldestFirst ? 'ASC' : 'DESC',
|
|
149
149
|
});
|
|
150
150
|
|
|
151
|
+
// Track whether the component is still mounted to avoid state updates after unmount
|
|
152
|
+
const isMountedRef = useRef(true);
|
|
153
|
+
useEffect(() => {
|
|
154
|
+
isMountedRef.current = true;
|
|
155
|
+
return () => {
|
|
156
|
+
isMountedRef.current = false;
|
|
157
|
+
};
|
|
158
|
+
}, []);
|
|
159
|
+
|
|
151
160
|
const handleSorting = useCallback(
|
|
152
161
|
(cellA: any, cellB: any, { key, sortDirection }: { key: string; sortDirection: DataTableSortState }) => {
|
|
153
|
-
// Use setTimeout to
|
|
162
|
+
// Use setTimeout to defer setState until after render completes.
|
|
163
|
+
// This avoids setState during render (which Carbon DataTable's sortRow triggers).
|
|
164
|
+
// The isMountedRef check prevents state updates after unmount.
|
|
154
165
|
setTimeout(() => {
|
|
166
|
+
if (!isMountedRef.current) return;
|
|
155
167
|
if (sortDirection === 'NONE') {
|
|
156
168
|
setSortParams({ key: '', sortDirection });
|
|
157
169
|
} else {
|