@openmrs/esm-laboratory-app 1.5.2-pre.1741 → 1.5.2-pre.1746

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.
@@ -0,0 +1 @@
1
+ {"hash":"e7d27714cb29d11d","duration":9844}
@@ -4,4 +4,4 @@
4
4
  │ 4531.js (857.116 KiB)
5
5
  
6
6
 
7
- Rspack compiled with 1 warning in 8.71 s
7
+ Rspack compiled with 1 warning in 8.59 s
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # openmrs-esm-laboratory-app
2
2
 
3
- An O3 frontend module for managing laboratory requests and queues.
3
+ An O3 frontend module for managing laboratory requests and queues. It adds a **Laboratory** dashboard to the home page where lab staff can see incoming test orders, pick them up, record results, reject requests, and (optionally) review results before they are finalised.
4
4
 
5
5
  For more information, please refer to the [O3 Frontend Documentation](https://o3-docs.openmrs.org/).
6
6
 
@@ -8,15 +8,29 @@ For more information, please refer to the [O3 Frontend Documentation](https://o3
8
8
 
9
9
  ![Laboratory dashboard](assets/screenshots/labs_general_dashboard.png)
10
10
 
11
- ## Adding results
11
+ The dashboard lives at `/openmrs/spa/home/laboratory` and has three parts:
12
12
 
13
- Lab technicians can enter test results by expanding an in-progress order and clicking "Add lab results". This opens a workspace where results can be recorded for each test.
13
+ - **Summary tiles** showing counts of ordered tests, tests in progress (the worklist), and completed tests. A **Pending review** tile is added when `enableReviewingLabResultsBeforeApproval` is on.
14
+ - **Tab panels**, one per stage of the lab workflow. Each panel lists orders grouped by patient; expanding a row shows the individual orders and the actions available for them.
15
+ - A **date range filter** and search box on each panel. The date range defaults to today and is shared across all panels.
14
16
 
15
- ![Adding lab results](assets/screenshots/labs_enter_results.png)
17
+ | Tab | Shows orders whose fulfiller status is |
18
+ | --- | --- |
19
+ | Tests ordered | Not yet set (new orders that nobody has picked up) |
20
+ | In progress | `IN_PROGRESS` |
21
+ | Pending review | `DRAFT` (only shown when `enableReviewingLabResultsBeforeApproval` is on) |
22
+ | Completed | `COMPLETED` |
23
+ | Declined tests | `DECLINED` |
24
+
25
+ ## Lab workflow
16
26
 
17
- ## Customizing tab panels and summary tiles
27
+ - **Add test order.** The button in the page header opens a patient search. Picking a patient with an active visit opens the order basket, restricted to the configured lab order type. Patients without an active visit are prompted to start one first.
28
+ - **Pick lab request.** From the *Tests ordered* tab. Moves the order to `IN_PROGRESS` and onto the worklist.
29
+ - **Add lab results.** From the *In progress* tab. Opens the test results workspace where a result can be recorded for each test in the order. More tests can be added to the order from the same workspace.
30
+ - **Reject lab request.** From the *Tests ordered* or *In progress* tabs. Asks for a fulfiller comment and moves the order to `DECLINED`. The comment is shown as the reason for decline in the *Declined tests* tab.
31
+ - **Approve / Amend lab results.** From the *Pending review* tab, when the review step is enabled. Approving moves the order to `COMPLETED` and makes the results available to clinicians. Amending reopens the results form.
18
32
 
19
- Implementers can add or remove laboratory tab panels and summary tiles via extension configuration in the [routes.json](https://github.com/openmrs/openmrs-esm-laboratory-app/blob/main/src/routes.json) file.
33
+ ![Adding lab results](assets/screenshots/labs_enter_results.png)
20
34
 
21
35
  ## Configuration
22
36
 
@@ -24,10 +38,60 @@ The module supports the following configuration options:
24
38
 
25
39
  | Property | Type | Default | Description |
26
40
  | --- | --- | --- | --- |
27
- | `laboratoryOrderTypeUuid` | `string` | `52a447d3-a64a-11e3-9aeb-50e549534c5e` | UUID for the laboratory order type |
28
- | `labTableColumns` | `Array<string>` | `['name', 'age', 'sex', 'totalOrders', 'action']` | Columns to display in the lab table. Allowed values: `name`, `age`, `dob`, `sex`, `totalOrders`, `action`, `patientId` |
29
- | `patientIdIdentifierTypeUuid` | `UUID` | `05a29f94-c0ed-11e2-94be-8c13b969e334` | Identifier type UUID for the patient ID column. Only needed if `patientId` is included in `labTableColumns` |
30
- | `enableReviewingLabResultsBeforeApproval` | `boolean` | `false` | When enabled, lab results are submitted for review before being approved and finalized |
41
+ | `laboratoryOrderTypeUuid` | `string` | `52a447d3-a64a-11e3-9aeb-50e549534c5e` | UUID of the order type treated as a lab order. Used to fetch orders and to filter the order basket when adding a test order |
42
+ | `labTableColumns` | `Array<string>` | `['name', 'urgency', 'age', 'sex', 'totalOrders', 'action']` | Columns to display in the lab table, in order. Allowed values: `name`, `urgency`, `age`, `dob`, `sex`, `totalOrders`, `action`, `patientId` |
43
+ | `patientIdIdentifierTypeUuid` | `UUID` | `05a29f94-c0ed-11e2-94be-8c13b969e334` (OpenMRS ID) | Identifier type shown in the `patientId` column. Only needed if `patientId` is included in `labTableColumns` |
44
+ | `usePreferredPatientIdentifier` | `boolean` | `true` | When `true`, the `patientId` column only shows an identifier that is both preferred and of the configured type. When `false`, any identifier of the configured type is shown, falling back to the patient's preferred identifier of any type |
45
+ | `enableReviewingLabResultsBeforeApproval` | `boolean` | `false` | Adds a review step. Shows the *Pending review* tab and tile and the approve/amend actions, so results are held for review before being finalised |
46
+
47
+ Example:
48
+
49
+ ```json
50
+ {
51
+ "@openmrs/esm-laboratory-app": {
52
+ "labTableColumns": ["name", "patientId", "urgency", "age", "sex", "totalOrders", "action"],
53
+ "enableReviewingLabResultsBeforeApproval": true
54
+ }
55
+ }
56
+ ```
57
+
58
+ ## Customizing tab panels, summary tiles and actions
59
+
60
+ Panels, tiles and the action buttons are all extensions, so implementers can add, remove or reorder them with the standard [`extensionSlots` configuration](https://o3-docs.openmrs.org/en-US/docs/extension-system/#extension-configurability) without changing this module. The slots this module renders are:
61
+
62
+ | Slot | What goes in it |
63
+ | --- | --- |
64
+ | `lab-tiles-slot` | Summary tiles at the top of the dashboard |
65
+ | `lab-panels-slot` | Tab panels. Extensions must declare `meta.name` and `meta.title` (the tab label) to be shown |
66
+ | `tests-ordered-actions-slot`, `rejected-ordered-actions-slot` | Actions for new orders (pick up, reject) |
67
+ | `inprogress-tests-actions-slot` | Actions for in-progress orders (add results, reject) |
68
+ | `approved-ordered-actions-slot`, `amended-ordered-actions-slot` | Actions for orders pending review (approve, amend) |
69
+ | `completed-lab-order-results-slot` | Rendering of recorded results for completed orders and in the approval modal |
70
+
71
+ The extensions this module attaches to those slots, and their `order`, are listed in [routes.json](src/routes.json). For example, to hide the *Declined tests* tab:
72
+
73
+ ```json
74
+ {
75
+ "@openmrs/esm-laboratory-app": {
76
+ "extensionSlots": {
77
+ "lab-panels-slot": {
78
+ "remove": ["declined-tile-component"]
79
+ }
80
+ }
81
+ }
82
+ }
83
+ ```
84
+
85
+ ## Dependencies
86
+
87
+ This module reuses workspaces and modals from other O3 frontend modules, which must be present in the distribution:
88
+
89
+ - `@openmrs/esm-patient-orders-app` for the test results form and the order basket
90
+ - `@openmrs/esm-patient-tests-app` for adding lab orders and for the modal used to amend results
91
+ - `@openmrs/esm-patient-search-app` for the patient search when adding a test order
92
+ - `@openmrs/esm-patient-chart-app` for the start visit form
93
+
94
+ On the backend it needs the REST web services module (`webservices.rest` 2.2.0 or newer). Orders are read from the `order` resource and status changes go through the `order/{uuid}/fulfillerdetails` sub-resource.
31
95
 
32
96
  ## Getting Started
33
97
 
@@ -43,12 +107,44 @@ yarn start
43
107
 
44
108
  # Or start on a specified port, e.g. 5000
45
109
  yarn start --port 5000
110
+
111
+ # Or proxy to a different backend (the default is https://dev3.openmrs.org/)
112
+ yarn start --backend http://localhost:8080/
46
113
  ```
47
114
 
48
115
  Once it is running, a browser window should open with O3 running. Log in and then navigate to `/openmrs/spa/home/laboratory`.
49
116
 
117
+ Other useful scripts:
118
+
119
+ ```sh
120
+ yarn verify # lint, type-check and unit tests, as run in CI
121
+ yarn lint
122
+ yarn typescript
123
+ yarn build # production build into dist/
124
+ yarn extract-translations
125
+ ```
126
+
50
127
  ## Running tests
51
128
 
129
+ Unit tests use [Vitest](https://vitest.dev/):
130
+
52
131
  ```sh
53
132
  yarn test
133
+ yarn test:watch
134
+ ```
135
+
136
+ End-to-end tests use [Playwright](https://playwright.dev/). Copy `example.env` to `.env`, start the dev server, then run:
137
+
138
+ ```sh
139
+ yarn test-e2e --headed
54
140
  ```
141
+
142
+ See the [E2E README](e2e/README.md) for details on the test structure, configuration and CI setup.
143
+
144
+ ## Translations
145
+
146
+ Translations are managed in [Transifex](https://app.transifex.com/openmrs/openmrs3/). Only `translations/en.json` should be edited in this repository, and it is regenerated from the source code with `yarn extract-translations`. Other locales are pulled from Transifex automatically.
147
+
148
+ ## Contributing
149
+
150
+ Pull requests are welcome. PR titles must follow the [OpenMRS conventional commit format](https://o3-docs.openmrs.org/en-US/docs/frontend-modules/contributing/#pull-requests), for example `(fix) O3-1234: Short description`. Before opening a PR, run `yarn verify` locally. See the [O3 contributing guide](https://o3-docs.openmrs.org/en-US/docs/frontend-modules/contributing/) for more.
@@ -1,3 +1,3 @@
1
- var _openmrs_esm_laboratory_app;!function(){var e="u">typeof globalThis?globalThis:self;if(void 0===e._FEDERATION_RUNTIME_CORE||void 0===e._OPENMRS_FEDERATION_SDK||void 0===e._OPENMRS_FEDERATION_ERROR_CODES)throw Error("@openmrs/esm-laboratory-app cannot start: the OpenMRS app shell serving this page does not provide the Module Federation runtime. This app was built with newer OpenMRS tooling than the app shell, so either upgrade @openmrs/esm-app-shell, or rebuild this app with tooling matching the app shell.");var t=e._FEDERATION_RUNTIME_CORE_FROM;t&&t.version&&"2.8"!==String(t.version).split(".").slice(0,2).join(".")&&console.warn("@openmrs/esm-laboratory-app was built against Module Federation 2.8.x but the app shell provides "+t.version+". Shared dependencies may not de-duplicate correctly.")}(),(()=>{var e,t,r,n,o,a={4361(e,t,r){"use strict";var n,o,a,i,s,l,u,p,c,d,f,h,m=r(7032),g=r.n(m);let y=[].filter(({plugin:e})=>e).map(({plugin:e,params:t})=>e(t)),b={};if((r.initializeSharingData||r.initializeExposesData)&&r.federation){let e=(e,t,r)=>{e&&e[t]&&(e[t]=r)},t=(e,t,r)=>{let n=r();Array.isArray(n)?(null!=e[t]||(e[t]=[]),e[t].push(...n)):"object"==typeof n&&null!==n&&(null!=e[t]||(e[t]={}),Object.assign(e[t],n))},m=(e,t,r)=>{null!=e[t]||(e[t]=r())},S=null!=(n=null==(l=r.remotesLoadingData)?void 0:l.chunkMapping)?n:{},E=null!=(o=null==(u=r.remotesLoadingData)?void 0:u.moduleIdToRemoteDataMapping)?o:{},O=null!=(a=null==(p=r.initializeSharingData)?void 0:p.scopeToSharingDataMapping)?a:{},M=null!=(i=null==(c=r.consumesLoadingData)?void 0:c.chunkMapping)?i:{},_=null!=(s=null==(d=r.consumesLoadingData)?void 0:d.moduleIdToConsumeDataMapping)?s:{},v={},R=[],T={},w=null==(f=r.initializeExposesData)?void 0:f.shareScope;for(let e in g())r.federation[e]=g()[e];m(r.federation,"consumesLoadingModuleToHandlerMapping",()=>{let e={};for(let[t,r]of Object.entries(_))e[t]={getter:r.fallback,shareInfo:{shareConfig:{fixedDependencies:!1,requiredVersion:r.requiredVersion,strictVersion:r.strictVersion,singleton:r.singleton,eager:r.eager},scope:[r.shareScope]},shareKey:r.shareKey};return e}),m(r.federation,"initOptions",()=>({})),m(r.federation.initOptions,"name",()=>"@openmrs/esm-laboratory-app"),m(r.federation.initOptions,"shareStrategy",()=>"version-first"),m(r.federation.initOptions,"shared",()=>{let e={};for(let[t,r]of Object.entries(O))for(let n of r)if("object"==typeof n&&null!==n){let{name:r,version:o,factory:a,eager:i,singleton:s,requiredVersion:l,strictVersion:u}=n,p={},c=function(e){return void 0!==e};c(s)&&(p.singleton=s),c(l)&&(p.requiredVersion=l),c(i)&&(p.eager=i),c(u)&&(p.strictVersion=u);let d={version:o,scope:[t],shareConfig:p,get:a};e[r]?e[r].push(d):e[r]=[d]}return e}),t(r.federation.initOptions,"remotes",()=>Object.values(b).flat().filter(e=>"script"===e.externalType)),t(r.federation.initOptions,"plugins",()=>y),m(r.federation,"bundlerRuntimeOptions",()=>({})),m(r.federation.bundlerRuntimeOptions,"remotes",()=>({})),m(r.federation.bundlerRuntimeOptions.remotes,"chunkMapping",()=>S),m(r.federation.bundlerRuntimeOptions.remotes,"remoteInfos",()=>b),m(r.federation.bundlerRuntimeOptions.remotes,"idToExternalAndNameMapping",()=>{let e={};for(let[t,r]of Object.entries(E))e[t]=[r.shareScope,r.name,r.externalModuleId,r.remoteName];return e}),m(r.federation.bundlerRuntimeOptions.remotes,"webpackRequire",()=>r),t(r.federation.bundlerRuntimeOptions.remotes,"idToRemoteMap",()=>{let e={};for(let[t,r]of Object.entries(E)){let n=b[r.remoteName];n&&(e[t]=n)}return e}),e(r,"S",r.federation.bundlerRuntime.S),r.federation.attachShareScopeMap&&r.federation.attachShareScopeMap(r),e(r.f,"remotes",(e,t)=>r.federation.bundlerRuntime.remotes({chunkId:e,promises:t,chunkMapping:S,idToExternalAndNameMapping:r.federation.bundlerRuntimeOptions.remotes.idToExternalAndNameMapping,idToRemoteMap:r.federation.bundlerRuntimeOptions.remotes.idToRemoteMap,webpackRequire:r})),e(r.f,"consumes",(e,t)=>r.federation.bundlerRuntime.consumes({chunkId:e,promises:t,chunkMapping:M,moduleToHandlerMapping:r.federation.consumesLoadingModuleToHandlerMapping,installedModules:v,webpackRequire:r})),e(r,"I",(e,t)=>r.federation.bundlerRuntime.I({shareScopeName:e,initScope:t,initPromises:R,initTokens:T,webpackRequire:r})),e(r,"initContainer",(e,t,n)=>r.federation.bundlerRuntime.initContainerEntry({shareScope:e,initScope:t,remoteEntryInitOptions:n,shareScopeKey:w,webpackRequire:r})),e(r,"getContainer",(e,t)=>{var n=r.initializeExposesData.moduleMap;return r.R=t,t=Object.prototype.hasOwnProperty.call(n,e)?n[e]():Promise.resolve().then(()=>{throw Error('Module "'+e+'" does not exist in container.')}),r.R=void 0,t}),r.federation.instance=r.federation.runtime.init(r.federation.initOptions),(null==(h=r.consumesLoadingData)?void 0:h.initialConsumes)&&r.federation.bundlerRuntime.installInitialConsumes({webpackRequire:r,installedModules:v,initialConsumes:r.consumesLoadingData.initialConsumes,moduleToHandlerMapping:r.federation.consumesLoadingModuleToHandlerMapping})}},5694(e,t,r){"use strict";r.d(t,{get:()=>r.getContainer,init:()=>r.initContainer})},3054(e){"use strict";e.exports=globalThis._FEDERATION_RUNTIME_CORE},9170(e){"use strict";e.exports=globalThis._OPENMRS_FEDERATION_ERROR_CODES},1853(e){"use strict";e.exports=globalThis._OPENMRS_FEDERATION_SDK},9369(e,t){var r=Object.create,n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,i=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty;t.__toESM=(e,t,l)=>(l=null!=e?r(i(e)):{},((e,t,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(var i,l=a(t),u=0,p=l.length;u<p;u++)i=l[u],s.call(e,i)||void 0===i||n(e,i,{get:(e=>t[e]).bind(null,i),enumerable:!(r=o(t,i))||r.enumerable});return e})(!t&&e&&e.__esModule?l:n(l,"default",{value:e,enumerable:!0}),e))},1222(e,t,r){Object.defineProperties(t,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),r(9369);let n=r(1146),o=r(3054),a={...o.helpers.global,getGlobalFederationInstance:n.getGlobalFederationInstance},i=o.helpers.share,s=o.helpers.utils;t.default={global:a,share:i,utils:s},t.global=a,t.share=i,t.utils=s},7201(e,t,r){Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),r(9369);let n=r(1146),o=r(3054),a=r(9170);function i(e){let t=new((0,o.getGlobalFederationConstructor)()||o.ModuleFederation)({id:`${e.name}@${e.version||Date.now()}`,...e});return(0,o.setGlobalFederationInstance)(t),t}let s=null;(0,o.setGlobalFederationConstructor)(o.ModuleFederation),Object.defineProperty(t,"Module",{enumerable:!0,get:function(){return o.Module}}),t.ModuleFederation=o.ModuleFederation,t.createInstance=i,t.getInstance=function(e){return e?o.CurrentGlobal.__FEDERATION__.__INSTANCES__.find(e)||null:s},Object.defineProperty(t,"getRemoteEntry",{enumerable:!0,get:function(){return o.getRemoteEntry}}),Object.defineProperty(t,"getRemoteInfo",{enumerable:!0,get:function(){return o.getRemoteInfo}}),t.init=function(e){let t=n.getGlobalFederationInstance(e.name,e.version),r={...e,id:e.id||""};return t?(t.initOptions(r),s||(s=t),t):s=i(r)},t.loadRemote=function(...e){return(0,o.assert)(s,a.RUNTIME_009,a.runtimeDescMap),s.loadRemote.apply(s,e)},Object.defineProperty(t,"loadScript",{enumerable:!0,get:function(){return o.loadScript}}),Object.defineProperty(t,"loadScriptNode",{enumerable:!0,get:function(){return o.loadScriptNode}}),t.loadShare=function(...e){return(0,o.assert)(s,a.RUNTIME_009,a.runtimeDescMap),s.loadShare.apply(s,e)},t.loadShareSync=function(...e){return(0,o.assert)(s,a.RUNTIME_009,a.runtimeDescMap),s.loadShareSync.apply(s,e)},t.preloadRemote=function(...e){return(0,o.assert)(s,a.RUNTIME_009,a.runtimeDescMap),s.preloadRemote.apply(s,e)},Object.defineProperty(t,"registerGlobalPlugins",{enumerable:!0,get:function(){return o.registerGlobalPlugins}}),t.registerPlugins=function(...e){return(0,o.assert)(s,a.RUNTIME_009,a.runtimeDescMap),s.registerPlugins.apply(s,e)},t.registerRemotes=function(...e){return(0,o.assert)(s,a.RUNTIME_009,a.runtimeDescMap),s.registerRemotes.apply(s,e)},t.registerShared=function(...e){return(0,o.assert)(s,a.RUNTIME_009,a.runtimeDescMap),s.registerShared.apply(s,e)}},1146(e,t,r){r(9369);let n=r(3054);t.getGlobalFederationInstance=function(e,t){let r="@openmrs/esm-laboratory-app:1.5.2-pre.1741";return n.CurrentGlobal.__FEDERATION__.__INSTANCES__.find(n=>!!r&&n.options.id===r||n.options.name===e&&!n.options.version&&!t||n.options.name===e&&!!t&&n.options.version===t)}},1326(e,t){var r=Object.create,n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,i=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty;t.__toESM=(e,t,l)=>(l=null!=e?r(i(e)):{},((e,t,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(var i,l=a(t),u=0,p=l.length;u<p;u++)i=l[u],s.call(e,i)||void 0===i||n(e,i,{get:(e=>t[e]).bind(null,i),enumerable:!(r=o(t,i))||r.enumerable});return e})(!t&&e&&e.__esModule?l:n(l,"default",{value:e,enumerable:!0}),e))},3026(e,t){t.attachShareScopeMap=function(e){e.S&&!e.federation.hasAttachShareScopeMap&&e.federation.instance&&e.federation.instance.shareScopeMap&&(e.S=e.federation.instance.shareScopeMap,e.federation.hasAttachShareScopeMap=!0)}},9592(e,t){Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.FEDERATION_SUPPORTED_TYPES=["script"]},5769(e,t,r){let n=r(3026),o=r(9671),a=r(9864),i=r(9296),s=r(2742);t.consumes=function(e){o.updateConsumeOptions(e);let{chunkId:t,promises:r,installedModules:l,webpackRequire:u,chunkMapping:p,moduleToHandlerMapping:c}=e;n.attachShareScopeMap(u),u.o(p,t)&&p[t].forEach(e=>{if(u.o(l,e))return r.push(l[e]);let t=t=>{l[e]=0,u.m[e]=r=>{delete u.c[e];let n=t(),{shareInfo:o}=c[e];if(o?.shareConfig?.layer&&n&&"object"==typeof n)try{n.hasOwnProperty("layer")&&void 0!==n.layer||(n.layer=o.shareConfig.layer)}catch(e){}r.exports=n}},n=t=>{delete l[e],u.m[e]=r=>{throw delete u.c[e],t}};try{let o=u.federation.instance;if(!o)throw Error("Federation instance not found!");let{shareKey:p,getter:d,shareInfo:f,treeShakingGetter:h}=c[e],m=a.getUsedExports(u,p),g={...f};Array.isArray(g.scope)&&Array.isArray(g.scope[0])&&(g.scope=g.scope[0]),m&&(g.treeShaking={usedExports:m,useIn:[o.options.name]});let y=o.loadShare(p,{customShareInfo:g}).then(e=>{if(!1===e){if("function"!=typeof d)throw Error(s.getShortErrorMsg(i.RUNTIME_012,{[i.RUNTIME_012]:'The getter for the shared module is not a function. This may be caused by setting "shared.import: false" without the host providing the corresponding lib.'},{shareKey:p}));return h?.()||d()}return e});y.then?r.push(l[e]=y.then(t).catch(n)):t(y)}catch(e){n(e)}})}},9296(e,t){t.RUNTIME_012="RUNTIME-012"},2742(e,t){t.getShortErrorMsg=(e,t,r,n)=>{let o=[`${[t[e]]} #${e}`];return r&&o.push(`args: ${JSON.stringify(r)}`),o.push(`View the docs to see how to solve: https://module-federation.io/guide/troubleshooting/${e.split("-")[0].toLowerCase()}#${e.toLowerCase()}`),n&&o.push(`Original Error Message:
1
+ var _openmrs_esm_laboratory_app;!function(){var e="u">typeof globalThis?globalThis:self;if(void 0===e._FEDERATION_RUNTIME_CORE||void 0===e._OPENMRS_FEDERATION_SDK||void 0===e._OPENMRS_FEDERATION_ERROR_CODES)throw Error("@openmrs/esm-laboratory-app cannot start: the OpenMRS app shell serving this page does not provide the Module Federation runtime. This app was built with newer OpenMRS tooling than the app shell, so either upgrade @openmrs/esm-app-shell, or rebuild this app with tooling matching the app shell.");var t=e._FEDERATION_RUNTIME_CORE_FROM;t&&t.version&&"2.8"!==String(t.version).split(".").slice(0,2).join(".")&&console.warn("@openmrs/esm-laboratory-app was built against Module Federation 2.8.x but the app shell provides "+t.version+". Shared dependencies may not de-duplicate correctly.")}(),(()=>{var e,t,r,n,o,a={4361(e,t,r){"use strict";var n,o,a,i,s,l,u,p,c,d,f,h,m=r(7032),g=r.n(m);let y=[].filter(({plugin:e})=>e).map(({plugin:e,params:t})=>e(t)),b={};if((r.initializeSharingData||r.initializeExposesData)&&r.federation){let e=(e,t,r)=>{e&&e[t]&&(e[t]=r)},t=(e,t,r)=>{let n=r();Array.isArray(n)?(null!=e[t]||(e[t]=[]),e[t].push(...n)):"object"==typeof n&&null!==n&&(null!=e[t]||(e[t]={}),Object.assign(e[t],n))},m=(e,t,r)=>{null!=e[t]||(e[t]=r())},S=null!=(n=null==(l=r.remotesLoadingData)?void 0:l.chunkMapping)?n:{},E=null!=(o=null==(u=r.remotesLoadingData)?void 0:u.moduleIdToRemoteDataMapping)?o:{},O=null!=(a=null==(p=r.initializeSharingData)?void 0:p.scopeToSharingDataMapping)?a:{},M=null!=(i=null==(c=r.consumesLoadingData)?void 0:c.chunkMapping)?i:{},_=null!=(s=null==(d=r.consumesLoadingData)?void 0:d.moduleIdToConsumeDataMapping)?s:{},v={},R=[],T={},w=null==(f=r.initializeExposesData)?void 0:f.shareScope;for(let e in g())r.federation[e]=g()[e];m(r.federation,"consumesLoadingModuleToHandlerMapping",()=>{let e={};for(let[t,r]of Object.entries(_))e[t]={getter:r.fallback,shareInfo:{shareConfig:{fixedDependencies:!1,requiredVersion:r.requiredVersion,strictVersion:r.strictVersion,singleton:r.singleton,eager:r.eager},scope:[r.shareScope]},shareKey:r.shareKey};return e}),m(r.federation,"initOptions",()=>({})),m(r.federation.initOptions,"name",()=>"@openmrs/esm-laboratory-app"),m(r.federation.initOptions,"shareStrategy",()=>"version-first"),m(r.federation.initOptions,"shared",()=>{let e={};for(let[t,r]of Object.entries(O))for(let n of r)if("object"==typeof n&&null!==n){let{name:r,version:o,factory:a,eager:i,singleton:s,requiredVersion:l,strictVersion:u}=n,p={},c=function(e){return void 0!==e};c(s)&&(p.singleton=s),c(l)&&(p.requiredVersion=l),c(i)&&(p.eager=i),c(u)&&(p.strictVersion=u);let d={version:o,scope:[t],shareConfig:p,get:a};e[r]?e[r].push(d):e[r]=[d]}return e}),t(r.federation.initOptions,"remotes",()=>Object.values(b).flat().filter(e=>"script"===e.externalType)),t(r.federation.initOptions,"plugins",()=>y),m(r.federation,"bundlerRuntimeOptions",()=>({})),m(r.federation.bundlerRuntimeOptions,"remotes",()=>({})),m(r.federation.bundlerRuntimeOptions.remotes,"chunkMapping",()=>S),m(r.federation.bundlerRuntimeOptions.remotes,"remoteInfos",()=>b),m(r.federation.bundlerRuntimeOptions.remotes,"idToExternalAndNameMapping",()=>{let e={};for(let[t,r]of Object.entries(E))e[t]=[r.shareScope,r.name,r.externalModuleId,r.remoteName];return e}),m(r.federation.bundlerRuntimeOptions.remotes,"webpackRequire",()=>r),t(r.federation.bundlerRuntimeOptions.remotes,"idToRemoteMap",()=>{let e={};for(let[t,r]of Object.entries(E)){let n=b[r.remoteName];n&&(e[t]=n)}return e}),e(r,"S",r.federation.bundlerRuntime.S),r.federation.attachShareScopeMap&&r.federation.attachShareScopeMap(r),e(r.f,"remotes",(e,t)=>r.federation.bundlerRuntime.remotes({chunkId:e,promises:t,chunkMapping:S,idToExternalAndNameMapping:r.federation.bundlerRuntimeOptions.remotes.idToExternalAndNameMapping,idToRemoteMap:r.federation.bundlerRuntimeOptions.remotes.idToRemoteMap,webpackRequire:r})),e(r.f,"consumes",(e,t)=>r.federation.bundlerRuntime.consumes({chunkId:e,promises:t,chunkMapping:M,moduleToHandlerMapping:r.federation.consumesLoadingModuleToHandlerMapping,installedModules:v,webpackRequire:r})),e(r,"I",(e,t)=>r.federation.bundlerRuntime.I({shareScopeName:e,initScope:t,initPromises:R,initTokens:T,webpackRequire:r})),e(r,"initContainer",(e,t,n)=>r.federation.bundlerRuntime.initContainerEntry({shareScope:e,initScope:t,remoteEntryInitOptions:n,shareScopeKey:w,webpackRequire:r})),e(r,"getContainer",(e,t)=>{var n=r.initializeExposesData.moduleMap;return r.R=t,t=Object.prototype.hasOwnProperty.call(n,e)?n[e]():Promise.resolve().then(()=>{throw Error('Module "'+e+'" does not exist in container.')}),r.R=void 0,t}),r.federation.instance=r.federation.runtime.init(r.federation.initOptions),(null==(h=r.consumesLoadingData)?void 0:h.initialConsumes)&&r.federation.bundlerRuntime.installInitialConsumes({webpackRequire:r,installedModules:v,initialConsumes:r.consumesLoadingData.initialConsumes,moduleToHandlerMapping:r.federation.consumesLoadingModuleToHandlerMapping})}},5694(e,t,r){"use strict";r.d(t,{get:()=>r.getContainer,init:()=>r.initContainer})},3054(e){"use strict";e.exports=globalThis._FEDERATION_RUNTIME_CORE},9170(e){"use strict";e.exports=globalThis._OPENMRS_FEDERATION_ERROR_CODES},1853(e){"use strict";e.exports=globalThis._OPENMRS_FEDERATION_SDK},9369(e,t){var r=Object.create,n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,i=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty;t.__toESM=(e,t,l)=>(l=null!=e?r(i(e)):{},((e,t,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(var i,l=a(t),u=0,p=l.length;u<p;u++)i=l[u],s.call(e,i)||void 0===i||n(e,i,{get:(e=>t[e]).bind(null,i),enumerable:!(r=o(t,i))||r.enumerable});return e})(!t&&e&&e.__esModule?l:n(l,"default",{value:e,enumerable:!0}),e))},1222(e,t,r){Object.defineProperties(t,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),r(9369);let n=r(1146),o=r(3054),a={...o.helpers.global,getGlobalFederationInstance:n.getGlobalFederationInstance},i=o.helpers.share,s=o.helpers.utils;t.default={global:a,share:i,utils:s},t.global=a,t.share=i,t.utils=s},7201(e,t,r){Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),r(9369);let n=r(1146),o=r(3054),a=r(9170);function i(e){let t=new((0,o.getGlobalFederationConstructor)()||o.ModuleFederation)({id:`${e.name}@${e.version||Date.now()}`,...e});return(0,o.setGlobalFederationInstance)(t),t}let s=null;(0,o.setGlobalFederationConstructor)(o.ModuleFederation),Object.defineProperty(t,"Module",{enumerable:!0,get:function(){return o.Module}}),t.ModuleFederation=o.ModuleFederation,t.createInstance=i,t.getInstance=function(e){return e?o.CurrentGlobal.__FEDERATION__.__INSTANCES__.find(e)||null:s},Object.defineProperty(t,"getRemoteEntry",{enumerable:!0,get:function(){return o.getRemoteEntry}}),Object.defineProperty(t,"getRemoteInfo",{enumerable:!0,get:function(){return o.getRemoteInfo}}),t.init=function(e){let t=n.getGlobalFederationInstance(e.name,e.version),r={...e,id:e.id||""};return t?(t.initOptions(r),s||(s=t),t):s=i(r)},t.loadRemote=function(...e){return(0,o.assert)(s,a.RUNTIME_009,a.runtimeDescMap),s.loadRemote.apply(s,e)},Object.defineProperty(t,"loadScript",{enumerable:!0,get:function(){return o.loadScript}}),Object.defineProperty(t,"loadScriptNode",{enumerable:!0,get:function(){return o.loadScriptNode}}),t.loadShare=function(...e){return(0,o.assert)(s,a.RUNTIME_009,a.runtimeDescMap),s.loadShare.apply(s,e)},t.loadShareSync=function(...e){return(0,o.assert)(s,a.RUNTIME_009,a.runtimeDescMap),s.loadShareSync.apply(s,e)},t.preloadRemote=function(...e){return(0,o.assert)(s,a.RUNTIME_009,a.runtimeDescMap),s.preloadRemote.apply(s,e)},Object.defineProperty(t,"registerGlobalPlugins",{enumerable:!0,get:function(){return o.registerGlobalPlugins}}),t.registerPlugins=function(...e){return(0,o.assert)(s,a.RUNTIME_009,a.runtimeDescMap),s.registerPlugins.apply(s,e)},t.registerRemotes=function(...e){return(0,o.assert)(s,a.RUNTIME_009,a.runtimeDescMap),s.registerRemotes.apply(s,e)},t.registerShared=function(...e){return(0,o.assert)(s,a.RUNTIME_009,a.runtimeDescMap),s.registerShared.apply(s,e)}},1146(e,t,r){r(9369);let n=r(3054);t.getGlobalFederationInstance=function(e,t){let r="@openmrs/esm-laboratory-app:1.5.2-pre.1746";return n.CurrentGlobal.__FEDERATION__.__INSTANCES__.find(n=>!!r&&n.options.id===r||n.options.name===e&&!n.options.version&&!t||n.options.name===e&&!!t&&n.options.version===t)}},1326(e,t){var r=Object.create,n=Object.defineProperty,o=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,i=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty;t.__toESM=(e,t,l)=>(l=null!=e?r(i(e)):{},((e,t,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(var i,l=a(t),u=0,p=l.length;u<p;u++)i=l[u],s.call(e,i)||void 0===i||n(e,i,{get:(e=>t[e]).bind(null,i),enumerable:!(r=o(t,i))||r.enumerable});return e})(!t&&e&&e.__esModule?l:n(l,"default",{value:e,enumerable:!0}),e))},3026(e,t){t.attachShareScopeMap=function(e){e.S&&!e.federation.hasAttachShareScopeMap&&e.federation.instance&&e.federation.instance.shareScopeMap&&(e.S=e.federation.instance.shareScopeMap,e.federation.hasAttachShareScopeMap=!0)}},9592(e,t){Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),t.FEDERATION_SUPPORTED_TYPES=["script"]},5769(e,t,r){let n=r(3026),o=r(9671),a=r(9864),i=r(9296),s=r(2742);t.consumes=function(e){o.updateConsumeOptions(e);let{chunkId:t,promises:r,installedModules:l,webpackRequire:u,chunkMapping:p,moduleToHandlerMapping:c}=e;n.attachShareScopeMap(u),u.o(p,t)&&p[t].forEach(e=>{if(u.o(l,e))return r.push(l[e]);let t=t=>{l[e]=0,u.m[e]=r=>{delete u.c[e];let n=t(),{shareInfo:o}=c[e];if(o?.shareConfig?.layer&&n&&"object"==typeof n)try{n.hasOwnProperty("layer")&&void 0!==n.layer||(n.layer=o.shareConfig.layer)}catch(e){}r.exports=n}},n=t=>{delete l[e],u.m[e]=r=>{throw delete u.c[e],t}};try{let o=u.federation.instance;if(!o)throw Error("Federation instance not found!");let{shareKey:p,getter:d,shareInfo:f,treeShakingGetter:h}=c[e],m=a.getUsedExports(u,p),g={...f};Array.isArray(g.scope)&&Array.isArray(g.scope[0])&&(g.scope=g.scope[0]),m&&(g.treeShaking={usedExports:m,useIn:[o.options.name]});let y=o.loadShare(p,{customShareInfo:g}).then(e=>{if(!1===e){if("function"!=typeof d)throw Error(s.getShortErrorMsg(i.RUNTIME_012,{[i.RUNTIME_012]:'The getter for the shared module is not a function. This may be caused by setting "shared.import: false" without the host providing the corresponding lib.'},{shareKey:p}));return h?.()||d()}return e});y.then?r.push(l[e]=y.then(t).catch(n)):t(y)}catch(e){n(e)}})}},9296(e,t){t.RUNTIME_012="RUNTIME-012"},2742(e,t){t.getShortErrorMsg=(e,t,r,n)=>{let o=[`${[t[e]]} #${e}`];return r&&o.push(`args: ${JSON.stringify(r)}`),o.push(`View the docs to see how to solve: https://module-federation.io/guide/troubleshooting/${e.split("-")[0].toLowerCase()}#${e.toLowerCase()}`),n&&o.push(`Original Error Message:
2
2
  ${n}`),o.join("\n")}},2176(e,t){t.getSharedFallbackGetter=({shareKey:e,factory:t,version:r,webpackRequire:n,libraryType:o="global"})=>{let{runtime:a,instance:i,bundlerRuntime:s,sharedFallback:l}=n.federation;if(!l)return t;let u=l[e];if(!u)return t;let p=r?u.find(e=>e[1]===r):u[0];if(!p)throw Error(`No fallback item found for shareKey: ${e} and version: ${r}`);return()=>a.getRemoteEntry({origin:n.federation.instance,remoteInfo:{name:p[2],entry:`${n.p}${p[0]}`,type:o,entryGlobalName:p[2],shareScope:"default"}}).then(t=>{if(!t)throw Error(`Failed to load fallback entry for shareKey: ${e} and version: ${r}`);return t.init(n.federation.instance,s).then(()=>t.get())})}},9864(e,t){t.getUsedExports=function(e,t){let r=e.federation.usedExports;if(r)return r[t]}},7032(e,t,r){Object.defineProperties(t,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});let n=r(1326),o=r(3026),a=r(5313),i=r(5769),s=r(2614),l=r(8066),u=r(8593),p=r(6554),c=r(2176),d=r(7201);d=n.__toESM(d);let f={remotes:a.remotes,consumes:i.consumes,I:s.initializeSharing,S:{},installInitialConsumes:l.installInitialConsumes,initContainerEntry:u.initContainerEntry,init:p.init,getSharedFallbackGetter:c.getSharedFallbackGetter},h={runtime:d,instance:void 0,initOptions:void 0,bundlerRuntime:f,attachShareScopeMap:o.attachShareScopeMap,bundlerRuntimeOptions:{}},m=h.instance,g=h.initOptions,y=h.bundlerRuntimeOptions;t.attachShareScopeMap=o.attachShareScopeMap,t.bundlerRuntime=f,t.bundlerRuntimeOptions=y,t.default=h,t.initOptions=g,t.instance=m,Object.defineProperty(t,"runtime",{enumerable:!0,get:function(){return d}})},6554(e,t,r){let n=r(1326),o=r(7201),a=r(1222);a=n.__toESM(a),t.init=function({webpackRequire:e}){let{initOptions:t,runtime:n,sharedFallback:i,bundlerRuntime:s,libraryType:l}=e.federation;if(!t)throw Error("initOptions is required!");return t.plugins||=[],t.plugins.push({name:"tree-shake-plugin",beforeInit(t){let{userOptions:n,origin:u,options:p}=t,c=n.version||p.version;if(!i)return t;let d=n.shared||{},f=[];Object.keys(d).forEach(t=>{(Array.isArray(d[t])?d[t]:[d[t]]).forEach(r=>{f.push([t,r]),"get"in r&&(r.treeShaking||={},r.treeShaking.get=r.get,r.get=s.getSharedFallbackGetter({shareKey:t,factory:r.get,webpackRequire:e,libraryType:l,version:r.version}))})});let h=a.default.global.getGlobalSnapshotInfoByModuleInfo({name:u.name,version:c});return h&&"shared"in h&&(Object.keys(p.shared||{}).forEach(e=>{p.shared[e].forEach(t=>{f.push([e,t])})}),f.forEach(([e,t])=>{((e,t)=>{let n=h.shared.find(t=>t.sharedName===e);if(!n)return;let{treeShaking:a}=t;if(!a)return;let{secondarySharedTreeShakingName:i,secondarySharedTreeShakingEntry:s,treeShakingStatus:p}=n;a.status!==p&&(a.status=p,s&&l&&i&&(a.get=async()=>{let e=await (0,o.getRemoteEntry)({origin:u,remoteInfo:{name:i,entry:s,type:l,entryGlobalName:i,shareScope:"default"}});return await e.init(u,r.federation.bundlerRuntime),e.get()}))})(e,t)})),t}}),n.init(t)}},8593(e,t){t.initContainerEntry=function(e){let{webpackRequire:t,shareScope:r,initScope:n,shareScopeKey:o,remoteEntryInitOptions:a}=e;if(!t.S||!t.federation||!t.federation.instance||!t.federation.initOptions)return;let i=t.federation.instance;i.initOptions({name:t.federation.initOptions.name,remotes:[],...a});let s=a?.shareScopeKeys,l=a?.shareScopeMap;if(o&&"string"!=typeof o)o.forEach(e=>{if(!s||!l)return void i.initShareScopeMap(e,r,{hostShareScopeMap:a?.shareScopeMap||{}});l[e]||(l[e]={});let t=l[e];i.initShareScopeMap(e,t,{hostShareScopeMap:a?.shareScopeMap||{}})});else{let e=o||"default";Array.isArray(s)?s.forEach(e=>{l[e]||(l[e]={});let t=l[e];i.initShareScopeMap(e,t,{hostShareScopeMap:a?.shareScopeMap||{}})}):i.initShareScopeMap(e,r,{hostShareScopeMap:a?.shareScopeMap||{}})}return(t.federation.attachShareScopeMap&&t.federation.attachShareScopeMap(t),Array.isArray(o))?t.federation.initOptions.shared?t.I(o,n):Promise.all(o.map(e=>t.I(e,n))).then(()=>!0):t.I(o||"default",n)}},2614(e,t,r){let n=r(3026),o=r(9592);t.initializeSharing=function({shareScopeName:e,webpackRequire:t,initPromises:r,initTokens:a,initScope:i}){let s=Array.isArray(e)?e:[e];var l=[],u=function(s){i||(i=[]);let l=t.federation.instance;var u=a[s];if(u||(u=a[s]={from:l.name}),i.indexOf(u)>=0)return;i.push(u);let p=r[s];if(p)return p;var c=r=>{var n=e=>{let t;return t="Initialization of sharing external failed: "+e,"u">typeof console&&console.warn&&console.warn(t)};try{var o=t(r);if(!o)return;var a=r=>r&&r.init&&r.init(t.S[s],i,{shareScopeMap:t.S||{},shareScopeKeys:e});if(o.then)return d.push(o.then(a,n));var l=a(o);if(l&&"boolean"!=typeof l&&l.then)return d.push(l.catch(n))}catch(e){n(e)}};let d=l.initializeSharing(s,{strategy:l.options.shareStrategy,initScope:i,from:"build"});n.attachShareScopeMap(t);let f=t.federation.bundlerRuntimeOptions.remotes;return(f&&Object.keys(f.idToRemoteMap).forEach(e=>{let t=f.idToRemoteMap[e],r=f.idToExternalAndNameMapping[e][2];if(t.length>1)c(r);else if(1===t.length){let e=t[0];o.FEDERATION_SUPPORTED_TYPES.includes(e.externalType)||c(r)}}),d.length)?r[s]=Promise.all(d).then(()=>r[s]=!0):r[s]=!0};return s.forEach(e=>{l.push(u(e))}),Promise.all(l).then(()=>!0)}},8066(e,t,r){let n=r(9671),o=r(9864);t.installInitialConsumes=function(e){n.updateConsumeOptions(e);let{moduleToHandlerMapping:t,webpackRequire:r,installedModules:a,initialConsumes:i,asyncLoad:s}=e,l=[];i.forEach(e=>{l.push([e,()=>(function(e){let{moduleId:t,moduleToHandlerMapping:r,webpackRequire:n,asyncLoad:a}=e,i=n.federation.instance;if(!i)throw Error("Federation instance not found!");let{shareKey:s,shareInfo:l}=r[t];try{let e=o.getUsedExports(n,s),t={...l};if(e&&(t.treeShaking={usedExports:e,useIn:[i.options.name]}),a)return i.loadShare(s,{customShareInfo:t});return i.loadShareSync(s,{customShareInfo:t})}catch(e){throw console.error('loadShareSync failed! The function should not be called unless you set "eager:true". If you do not set it, and encounter this issue, you can check whether an async boundary is implemented.'),console.error("The original error message is as follows: "),e}})({moduleId:e,moduleToHandlerMapping:t,webpackRequire:r,asyncLoad:s})])});let u=(e,n)=>{r.m[e]=o=>{a[e]=0,delete r.c[e];let i=n();if("function"!=typeof i)throw Error(`Shared module is not available for eager consumption: ${e}`);let s=i(),{shareInfo:l}=t[e];if(l?.shareConfig?.layer&&s&&"object"==typeof s)try{s.hasOwnProperty("layer")&&void 0!==s.layer||(s.layer=l.shareConfig.layer)}catch(e){}o.exports=s}};if(s)return Promise.all(l.map(async([e,t])=>{let r=await t();u(e,()=>r)}));l.forEach(([e,t])=>{u(e,t)})}},5313(e,t,r){r(1326);let n=r(3026),o=r(9592),a=r(9671),i=r(1853);t.remotes=function(e){a.updateRemoteOptions(e);let{chunkId:t,promises:r,webpackRequire:s,chunkMapping:l,idToExternalAndNameMapping:u,idToRemoteMap:p}=e;n.attachShareScopeMap(s),s.o(l,t)&&l[t].forEach(e=>{let t=s.R;t||(t=[]);let n=u[e],a=p[e]||[];if(t.indexOf(n)>=0)return;if(t.push(n),n.p)return r.push(n.p);let l=t=>{t||(t=Error("Container missing")),"string"==typeof t.message&&(t.message+=`
3
3
  while loading "${n[1]}" from ${n[2]}`),s.m[e]=()=>{throw t},n.p=0},c=(e,t,o,a,i,s)=>{try{let u=e(t,o);if(!u||!u.then)return i(u,a,s);{let e=u.then(e=>i(e,a),l);if(!s)return e;r.push(n.p=e)}}catch(e){l(e)}};var d=(e,r,o)=>c(r.get,n[1],t,0,f,o),f=t=>{n.p=1,s.m[e]=e=>{e.exports=t()}};1===a.length&&o.FEDERATION_SUPPORTED_TYPES.includes(a[0].externalType)&&a[0].name?c(()=>{try{let e=(0,i.decodeName)(a[0].name,i.ENCODE_NAME_PREFIX)+n[1].slice(1),t=s.federation.instance,r=()=>s.federation.instance.loadRemote(e,{loadFactory:!1,from:"build"});if("version-first"===t.options.shareStrategy){let e=Array.isArray(n[0])?n[0]:[n[0]];return Promise.all(e.map(e=>t.sharedHandler.initializeSharing(e))).then(()=>r())}return r()}catch(e){l(e)}},n[2],0,0,f,1):c(s,n[2],0,0,(e,t,r)=>e?c(s.I,n[0],0,e,d,r):l(),1)})}},9671(e,t){t.updateConsumeOptions=function(e){let{webpackRequire:t,moduleToHandlerMapping:r}=e,{consumesLoadingData:n,initializeSharingData:o}=t,{sharedFallback:a,bundlerRuntime:i,libraryType:s}=t.federation;if(n&&!n._updated){let{moduleIdToConsumeDataMapping:o={},initialConsumes:l=[],chunkMapping:u={}}=n;if(Object.entries(o).forEach(([e,n])=>{r[e]||(r[e]={getter:a?i?.getSharedFallbackGetter({shareKey:n.shareKey,factory:n.fallback,webpackRequire:t,libraryType:s}):n.fallback,treeShakingGetter:a?n.fallback:void 0,shareInfo:{shareConfig:{requiredVersion:n.requiredVersion,strictVersion:n.strictVersion,singleton:n.singleton,eager:n.eager,layer:n.layer},scope:Array.isArray(n.shareScope)?n.shareScope:[n.shareScope||"default"],treeShaking:a?{get:n.fallback,mode:n.treeShakingMode}:void 0},shareKey:n.shareKey})}),"initialConsumes"in e){let{initialConsumes:t=[]}=e;l.forEach(e=>{t.includes(e)||t.push(e)})}if("chunkMapping"in e){let{chunkMapping:t={}}=e;Object.entries(u).forEach(([e,r])=>{t[e]||(t[e]=[]),r.forEach(r=>{t[e].includes(r)||t[e].push(r)})})}n._updated=1}if(o&&!o._updated){let{federation:e}=t;if(!e.instance||!o.scopeToSharingDataMapping)return;let r={};for(let[e,t]of Object.entries(o.scopeToSharingDataMapping))for(let n of t)if("object"==typeof n&&null!==n){let{name:t,version:o,factory:a,eager:i,singleton:s,requiredVersion:l,strictVersion:u}=n,p={requiredVersion:`^${o}`},c=function(e){return void 0!==e};c(s)&&(p.singleton=s),c(l)&&(p.requiredVersion=l),c(i)&&(p.eager=i),c(u)&&(p.strictVersion=u);let d={version:o,scope:[e],shareConfig:p,get:a};r[t]?r[t].push(d):r[t]=[d]}e.instance.registerShared(r),o._updated=1}},t.updateRemoteOptions=function(e){let{webpackRequire:t,idToExternalAndNameMapping:r={},idToRemoteMap:n={},chunkMapping:o={}}=e,{remotesLoadingData:a}=t,i=t.federation?.bundlerRuntimeOptions?.remotes?.remoteInfos;if(!a||a._updated||!i)return;let{chunkMapping:s,moduleIdToRemoteDataMapping:l}=a;if(s&&l){for(let[e,t]of Object.entries(l))if(r[e]||(r[e]=[t.shareScope,t.name,t.externalModuleId]),!n[e]&&i[t.remoteName]){let r=i[t.remoteName];n[e]||=[],r.forEach(t=>{n[e].includes(t)||n[e].push(t)})}o&&Object.entries(s).forEach(([e,t])=>{o[e]||(o[e]=[]),t.forEach(t=>{o[e].includes(t)||o[e].push(t)})}),a._updated=1}}}},i={};function s(e){var t=i[e];if(void 0!==t)return t.exports;var r=i[e]={exports:{}};return a[e].call(r.exports,r,r.exports,s),r.exports}s.m=a,s.c=i,s.x=()=>s(5694),s.federation||(s.federation={chunkMatcher:function(e){return!/^(2370|6813)$/.test(e)},rootOutputDir:""}),s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},u=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,s.t=function(e,t){if(1&t&&(e=this(e)),8&t||"object"==typeof e&&e&&(4&t&&e.__esModule||16&t&&"function"==typeof e.then))return e;var r=Object.create(null);s.r(r);var n={};l=l||[null,u({}),u([]),u(u)];for(var o=2&t&&e;("object"==typeof o||"function"==typeof o)&&!~l.indexOf(o);o=u(o))Object.getOwnPropertyNames(o).forEach(t=>{n[t]=()=>e[t]});return n.default=()=>e,s.d(r,n),r},s.d=(e,t)=>{for(var r in t)s.o(t,r)&&!s.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},s.f={},s.e=e=>Promise.all(Object.keys(s.f).reduce((t,r)=>(s.f[r](e,t),t),[])),s.u=e=>""+e+".js",s.miniCssF=e=>""+e+".css",s.g=(()=>{if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}})(),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),p={},s.l=function(e,t,r,n){if(p[e])return void p[e].push(t);if(void 0!==r)for(var o,a,i=document.getElementsByTagName("script"),l=0;l<i.length;l++){var u=i[l];if(u.getAttribute("src")==e||u.getAttribute("data-rspack")=="@openmrs/esm-laboratory-app:"+r){o=u;break}}o||(a=!0,(o=document.createElement("script")).timeout=120,s.nc&&o.setAttribute("nonce",s.nc),o.setAttribute("data-rspack","@openmrs/esm-laboratory-app:"+r),o.src=e),p[e]=[t];var c=function(t,r){o.onerror=o.onload=null,clearTimeout(d);var n=p[e];if(delete p[e],o.parentNode&&o.parentNode.removeChild(o),n&&n.forEach(function(e){return e(r)}),t)return t(r)},d=setTimeout(c.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=c.bind(null,o.onerror),o.onload=c.bind(null,o.onload),a&&document.head.appendChild(o)},s.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.rv=()=>"1.7.9",s.S={},s.initializeSharingData={scopeToSharingDataMapping:{default:[{name:"@openmrs/esm-framework",version:"10.0.1-pre.5452",factory:()=>Promise.all([s.e("5976"),s.e("5098"),s.e("4531"),s.e("461"),s.e("2370"),s.e("6813")]).then(()=>()=>s(3198)),eager:0,singleton:1,requiredVersion:"10.x",strictVersion:0},{name:"dayjs",version:"1.11.18",factory:()=>s.e("2538").then(()=>()=>s(6734)),eager:0,singleton:1,requiredVersion:"1.x",strictVersion:0},{name:"react-i18next",version:"16.2.1",factory:()=>Promise.all([s.e("5976"),s.e("4668"),s.e("2370"),s.e("2489")]).then(()=>()=>s(503)),eager:0,singleton:1,requiredVersion:"16.x",strictVersion:0},{name:"react-router-dom",version:"6.30.1",factory:()=>Promise.all([s.e("5098"),s.e("749"),s.e("2370")]).then(()=>()=>s(6204)),eager:0,singleton:1,requiredVersion:"6.x",strictVersion:0},{name:"react",version:"18.3.1",factory:()=>s.e("6237").then(()=>()=>s(6540)),eager:0,singleton:1,requiredVersion:"18.x",strictVersion:0}]},uniqueName:"@openmrs/esm-laboratory-app"},s.I=s.I||function(){throw Error("should have __webpack_require__.I")},s.g.importScripts&&(c=s.g.location+"");var l,u,p,c,d=s.g.document;if(!c&&d&&(d.currentScript&&"SCRIPT"===d.currentScript.tagName.toUpperCase()&&(c=d.currentScript.src),!c)){var f=d.getElementsByTagName("script");if(f.length)for(var h=f.length-1;h>-1&&(!c||!/^http(s?):/.test(c));)c=f[h--].src}if(!c)throw Error("Automatic publicPath is not supported in this browser");if(s.p=c=c.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),s.consumesLoadingData={chunkMapping:{1570:["4803","1505"],2370:["2153"],6813:["6045","5021","2492"]},moduleIdToConsumeDataMapping:{4803:{shareScope:"default",shareKey:"@openmrs/esm-framework",import:"@openmrs/esm-framework",requiredVersion:"10.x",strictVersion:!1,singleton:!0,eager:!1,fallback:()=>Promise.all([s.e("5976"),s.e("4531")]).then(()=>()=>s(3198))},5021:{shareScope:"default",shareKey:"react-router-dom",import:"react-router-dom",requiredVersion:"6.x",strictVersion:!1,singleton:!0,eager:!1,fallback:()=>s.e("749").then(()=>()=>s(6204))},2492:{shareScope:"default",shareKey:"dayjs",import:"dayjs",requiredVersion:"1.x",strictVersion:!1,singleton:!0,eager:!1,fallback:()=>s.e("2538").then(()=>()=>s(6734))},1505:{shareScope:"default",shareKey:"@openmrs/esm-framework/src/internal",import:"@openmrs/esm-framework/src/internal",requiredVersion:"*",strictVersion:!1,singleton:!0,eager:!1,fallback:()=>Promise.all([s.e("5976"),s.e("4531")]).then(()=>()=>s(3198))},2153:{shareScope:"default",shareKey:"react",import:"react",requiredVersion:"18.x",strictVersion:!1,singleton:!0,eager:!1,fallback:()=>s.e("6237").then(()=>()=>s(6540))},6045:{shareScope:"default",shareKey:"react-i18next",import:"react-i18next",requiredVersion:"16.x",strictVersion:!1,singleton:!0,eager:!1,fallback:()=>Promise.all([s.e("5976"),s.e("4668")]).then(()=>()=>s(503))}},initialConsumes:[]},s.f.consumes=s.f.consumes||function(){throw Error("should have __webpack_require__.f.consumes")},"u">typeof document){var m=function(e,t,r,n,o){var a=document.createElement("link");return a.rel="stylesheet",a.type="text/css",s.nc&&(a.nonce=s.nc),a.href=t,a.onerror=a.onload=function(r){if(a.onerror=a.onload=null,"load"===r.type)n();else{var i=r&&("load"===r.type?"missing":r.type),s=r&&r.target&&r.target.href||t,l=Error("Loading CSS chunk "+e+" failed.\\n("+s+")");l.code="CSS_CHUNK_LOAD_FAILED",l.type=i,l.request=s,a.parentNode&&a.parentNode.removeChild(a),o(l)}},r?r.parentNode.insertBefore(a,r.nextSibling):document.head.appendChild(a),a},g=function(e,t){for(var r=document.getElementsByTagName("link"),n=0;n<r.length;n++){var o=r[n],a=o.getAttribute("data-href")||o.getAttribute("href");if(a&&(a=a.split("?")[0]),"stylesheet"===o.rel&&(a===e||a===t))return o}for(var i=document.getElementsByTagName("style"),n=0;n<i.length;n++){var o=i[n],a=o.getAttribute("data-href");if(a===e||a===t)return o}},y={8710:0};s.f.miniCss=function(e,t){if(y[e])t.push(y[e]);else 0!==y[e]&&({1570:1,1656:1,1929:1,1966:1,2316:1,2659:1,3994:1,4531:1,5306:1,6050:1,7033:1,7423:1,8323:1,8420:1,8435:1,9467:1,9515:1})[e]&&t.push(y[e]=new Promise(function(t,r){var n=s.miniCssF(e),o=s.p+n;if(g(n,o))return t();m(e,o,null,t,r)}).then(function(){y[e]=0},function(t){throw delete y[e],t}))}}s.initializeExposesData={moduleMap:{"./start":()=>Promise.all([s.e("5098"),s.e("461"),s.e("2370"),s.e("6813"),s.e("1570")]).then(()=>()=>s(3209))},shareScope:"default"},s.getContainer=s.getContainer||function(){throw Error("should have __webpack_require__.getContainer")},s.initContainer=s.initContainer||function(){throw Error("should have __webpack_require__.initContainer")},e={8710:0},s.f.j=function(t,r){var n=s.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else if(/^(2370|6813)$/.test(t))e[t]=0;else{var o=new Promise((r,o)=>n=e[t]=[r,o]);r.push(n[2]=o);var a=s.p+s.u(t),i=Error();s.l(a,function(r){if(s.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;i.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",i.name="ChunkLoadError",i.type=o,i.request=a,n[1](i)}},"chunk-"+t,t)}},t=(t,r)=>{var n,o,[a,i,l]=r,u=0;if(a.some(t=>0!==e[t])){for(n in i)s.o(i,n)&&(s.m[n]=i[n]);l&&l(s)}for(t&&t(r);u<a.length;u++)o=a[u],s.o(e,o)&&e[o]&&e[o][0](),e[o]=0},(r=globalThis.webpackChunk_openmrs_esm_laboratory_app=globalThis.webpackChunk_openmrs_esm_laboratory_app||[]).forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r)),s.ruid="bundler=rspack@1.7.9",n=s.x,o=!1,s.x=function(){if(o||(o=!0,s(4361)),"function"==typeof n)return n();console.warn("[MF] Invalid prevStartup")},_openmrs_esm_laboratory_app=s.x()})();
@@ -1626,7 +1626,7 @@
1626
1626
  "auxiliaryFiles": [
1627
1627
  "openmrs-esm-laboratory-app.js.map"
1628
1628
  ],
1629
- "hash": "36622b83d9972e00",
1629
+ "hash": "07f0fd3e0c57535d",
1630
1630
  "childrenByOrder": {}
1631
1631
  },
1632
1632
  {
package/dist/routes.json CHANGED
@@ -1 +1 @@
1
- {"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"webservices.rest":">=2.2.0"},"pages":[{"component":"root","route":"laboratory"}],"extensions":[{"name":"laboratory-dashboard","slot":"laboratory-dashboard-slot","component":"root"},{"name":"laboratory-dashboard-link","slot":"homepage-dashboard-slot","component":"laboratoryDashboardLink","meta":{"name":"laboratory","slot":"laboratory-dashboard-slot","title":"Laboratory"}},{"name":"pickup-lab-request-modal","component":"pickupLabRequestModal"},{"name":"approval-lab-results-modal","component":"approvalLabResultsModal"},{"name":"reject-lab-request-modal","component":"rejectLabRequestModal"},{"name":"all-lab-requests-table","slot":"lab-panels-slot","order":0,"component":"allLabRequestsTable","meta":{"name":"testsOrderedPanel","title":"Tests ordered"}},{"name":"inprogress-lab-requests-table","slot":"lab-panels-slot","component":"inprogressLabRequestsTable","order":1,"meta":{"name":"inprogressPanel","title":"In progress"}},{"name":"completed-lab-requests-table","slot":"lab-panels-slot","component":"completedLabRequestsTable","order":3,"meta":{"name":"completedPanel","title":"Completed"}},{"name":"tests-ordered-tile-component","slot":"lab-tiles-slot","component":"testOrderedTile","meta":{"name":"testsOrderedTileSlot","title":"Ordered tests"}},{"name":"pending-review-lab-requests-table","slot":"lab-panels-slot","component":"pendingReviewLabRequestsTable","order":2,"meta":{"name":"pendingReviewPanel","title":"Pending review tests"}},{"name":"worklist-tile-component","slot":"lab-tiles-slot","component":"worklistTile","meta":{"name":"worklistTileSlot","title":"Worklist"}},{"name":"pending-review-list-tile-component","slot":"lab-tiles-slot","component":"pendingReviewListTile","meta":{"name":"pendingReviewTileSlot","title":"Pending review tests"}},{"name":"completed-tile-component","slot":"lab-tiles-slot","component":"completedTile","meta":{"name":"completedTileSlot","title":"Completed"}},{"name":"declined-tile-component","slot":"lab-panels-slot","component":"declinedLabRequestsTable","order":4,"meta":{"name":"declinedPanel","title":"Declined tests"}},{"name":"pick-lab-request-action","component":"pickupLabRequestAction","slot":"tests-ordered-actions-slot"},{"name":"approve-lab-results-tests-ordered-action","component":"approveLabResultsAction","slot":"approved-ordered-actions-slot"},{"name":"amend-lab-results-tests-ordered-action","component":"amendLabResultsAction","slot":"amended-ordered-actions-slot"},{"name":"reject-lab-request-tests-ordered-action","component":"rejectLabRequestAction","slot":"rejected-ordered-actions-slot"},{"name":"reject-lab-request-worklist-action","component":"rejectLabRequestAction","slot":"inprogress-tests-actions-slot"},{"name":"add-lab-request-results-action","component":"addLabRequestResultsAction","slot":"inprogress-tests-actions-slot"}],"workspaces2":[{"name":"lab-app-test-results-form-workspace","component":"@openmrs/esm-patient-orders-app#exportedTestResultsFormWorkspace","window":"labs-app-test-results-window"},{"name":"lab-app-test-results-add-lab-order-workspace","component":"@openmrs/esm-patient-tests-app#exportedAddLabOrderWorkspace","window":"labs-app-test-results-window"},{"name":"add-test-order-patient-search-workspace","component":"@openmrs/esm-patient-search-app#patientSearchWorkspace2","window":"add-test-order-window"},{"name":"add-test-order-start-visit-workspace","component":"@openmrs/esm-patient-chart-app#exportedVisitForm","window":"add-test-order-window"},{"name":"add-test-order-basket-workspace","component":"@openmrs/esm-patient-orders-app#exportedOrderBasketWorkspace","window":"add-test-order-window"},{"name":"add-test-order-basket-add-lab-order-workspace","component":"@openmrs/esm-patient-tests-app#exportedAddLabOrderWorkspace","window":"add-test-order-window"}],"workspaceWindows2":[{"name":"labs-app-test-results-window","group":"labs-app-group"},{"name":"add-test-order-window","group":"add-test-order-group"}],"workspaceGroups2":[{"name":"labs-app-group","scopePattern":"/home/laboratory"},{"name":"add-test-order-group","scopePattern":"/home/laboratory"}],"version":"1.5.2-pre.1741"}
1
+ {"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"webservices.rest":">=2.2.0"},"pages":[{"component":"root","route":"laboratory"}],"extensions":[{"name":"laboratory-dashboard","slot":"laboratory-dashboard-slot","component":"root"},{"name":"laboratory-dashboard-link","slot":"homepage-dashboard-slot","component":"laboratoryDashboardLink","meta":{"name":"laboratory","slot":"laboratory-dashboard-slot","title":"Laboratory"}},{"name":"pickup-lab-request-modal","component":"pickupLabRequestModal"},{"name":"approval-lab-results-modal","component":"approvalLabResultsModal"},{"name":"reject-lab-request-modal","component":"rejectLabRequestModal"},{"name":"all-lab-requests-table","slot":"lab-panels-slot","order":0,"component":"allLabRequestsTable","meta":{"name":"testsOrderedPanel","title":"Tests ordered"}},{"name":"inprogress-lab-requests-table","slot":"lab-panels-slot","component":"inprogressLabRequestsTable","order":1,"meta":{"name":"inprogressPanel","title":"In progress"}},{"name":"completed-lab-requests-table","slot":"lab-panels-slot","component":"completedLabRequestsTable","order":3,"meta":{"name":"completedPanel","title":"Completed"}},{"name":"tests-ordered-tile-component","slot":"lab-tiles-slot","component":"testOrderedTile","meta":{"name":"testsOrderedTileSlot","title":"Ordered tests"}},{"name":"pending-review-lab-requests-table","slot":"lab-panels-slot","component":"pendingReviewLabRequestsTable","order":2,"meta":{"name":"pendingReviewPanel","title":"Pending review tests"}},{"name":"worklist-tile-component","slot":"lab-tiles-slot","component":"worklistTile","meta":{"name":"worklistTileSlot","title":"Worklist"}},{"name":"pending-review-list-tile-component","slot":"lab-tiles-slot","component":"pendingReviewListTile","meta":{"name":"pendingReviewTileSlot","title":"Pending review tests"}},{"name":"completed-tile-component","slot":"lab-tiles-slot","component":"completedTile","meta":{"name":"completedTileSlot","title":"Completed"}},{"name":"declined-tile-component","slot":"lab-panels-slot","component":"declinedLabRequestsTable","order":4,"meta":{"name":"declinedPanel","title":"Declined tests"}},{"name":"pick-lab-request-action","component":"pickupLabRequestAction","slot":"tests-ordered-actions-slot"},{"name":"approve-lab-results-tests-ordered-action","component":"approveLabResultsAction","slot":"approved-ordered-actions-slot"},{"name":"amend-lab-results-tests-ordered-action","component":"amendLabResultsAction","slot":"amended-ordered-actions-slot"},{"name":"reject-lab-request-tests-ordered-action","component":"rejectLabRequestAction","slot":"rejected-ordered-actions-slot"},{"name":"reject-lab-request-worklist-action","component":"rejectLabRequestAction","slot":"inprogress-tests-actions-slot"},{"name":"add-lab-request-results-action","component":"addLabRequestResultsAction","slot":"inprogress-tests-actions-slot"}],"workspaces2":[{"name":"lab-app-test-results-form-workspace","component":"@openmrs/esm-patient-orders-app#exportedTestResultsFormWorkspace","window":"labs-app-test-results-window"},{"name":"lab-app-test-results-add-lab-order-workspace","component":"@openmrs/esm-patient-tests-app#exportedAddLabOrderWorkspace","window":"labs-app-test-results-window"},{"name":"add-test-order-patient-search-workspace","component":"@openmrs/esm-patient-search-app#patientSearchWorkspace2","window":"add-test-order-window"},{"name":"add-test-order-start-visit-workspace","component":"@openmrs/esm-patient-chart-app#exportedVisitForm","window":"add-test-order-window"},{"name":"add-test-order-basket-workspace","component":"@openmrs/esm-patient-orders-app#exportedOrderBasketWorkspace","window":"add-test-order-window"},{"name":"add-test-order-basket-add-lab-order-workspace","component":"@openmrs/esm-patient-tests-app#exportedAddLabOrderWorkspace","window":"add-test-order-window"}],"workspaceWindows2":[{"name":"labs-app-test-results-window","group":"labs-app-group"},{"name":"add-test-order-window","group":"add-test-order-group"}],"workspaceGroups2":[{"name":"labs-app-group","scopePattern":"/home/laboratory"},{"name":"add-test-order-group","scopePattern":"/home/laboratory"}],"version":"1.5.2-pre.1746"}
package/e2e/README.md CHANGED
@@ -35,11 +35,11 @@ To run a specific test by title:
35
35
  yarn test-e2e --headed -g "title of the test"
36
36
  ```
37
37
 
38
- Read the [e2e testing guide](https://o3-docs.openmrs.org/docs/frontend-modules/end-to-end-testing) to learn more about End-to-End tests in this project.
38
+ Read the [e2e testing guide](https://o3-docs.openmrs.org/en-US/docs/frontend-modules/end-to-end-testing/) to learn more about End-to-End tests in this project.
39
39
 
40
40
  ### Updating Playwright
41
41
 
42
- The Playwright version in the [Bamboo e2e Dockerfile](e2e/support/bamboo/playwright.Dockerfile#L2) and the `package.json` file must match. If you update the Playwright version in one place, you must update it in the other.
42
+ After updating `@playwright/test` in [package.json](../package.json), run `yarn playwright install chromium --with-deps` to install the matching browser binaries.
43
43
 
44
44
  ## Troubleshooting
45
45
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openmrs/esm-laboratory-app",
3
- "version": "1.5.2-pre.1741",
3
+ "version": "1.5.2-pre.1746",
4
4
  "license": "MPL-2.0",
5
5
  "description": "An O3 frontend module for managing laboratory requests and queues",
6
6
  "browser": "dist/openmrs-esm-laboratory-app.js",
@@ -1 +0,0 @@
1
- {"hash":"203d995328625666","duration":9865}