@thrustdevs/esm-procedure-orders-app 1.0.2-pre.6

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.
Files changed (207) hide show
  1. package/.turbo/turbo-build.log +41 -0
  2. package/README.md +7 -0
  3. package/dist/122.js +1 -0
  4. package/dist/122.js.map +1 -0
  5. package/dist/144.js +2 -0
  6. package/dist/144.js.LICENSE.txt +19 -0
  7. package/dist/144.js.map +1 -0
  8. package/dist/182.js +1 -0
  9. package/dist/182.js.map +1 -0
  10. package/dist/205.js +1 -0
  11. package/dist/205.js.map +1 -0
  12. package/dist/216.js +2 -0
  13. package/dist/216.js.LICENSE.txt +9 -0
  14. package/dist/216.js.map +1 -0
  15. package/dist/290.js +2 -0
  16. package/dist/290.js.LICENSE.txt +5 -0
  17. package/dist/290.js.map +1 -0
  18. package/dist/300.js +1 -0
  19. package/dist/341.js +2 -0
  20. package/dist/341.js.LICENSE.txt +29 -0
  21. package/dist/341.js.map +1 -0
  22. package/dist/41.js +2 -0
  23. package/dist/41.js.LICENSE.txt +9 -0
  24. package/dist/41.js.map +1 -0
  25. package/dist/470.js +1 -0
  26. package/dist/470.js.map +1 -0
  27. package/dist/495.js +1 -0
  28. package/dist/495.js.map +1 -0
  29. package/dist/506.js +2 -0
  30. package/dist/506.js.LICENSE.txt +39 -0
  31. package/dist/506.js.map +1 -0
  32. package/dist/537.js +1 -0
  33. package/dist/537.js.map +1 -0
  34. package/dist/647.js +2 -0
  35. package/dist/647.js.LICENSE.txt +5 -0
  36. package/dist/647.js.map +1 -0
  37. package/dist/7.js +1 -0
  38. package/dist/7.js.map +1 -0
  39. package/dist/719.js +2 -0
  40. package/dist/719.js.LICENSE.txt +5 -0
  41. package/dist/719.js.map +1 -0
  42. package/dist/720.js +1 -0
  43. package/dist/720.js.map +1 -0
  44. package/dist/876.js +1 -0
  45. package/dist/876.js.map +1 -0
  46. package/dist/883.js +1 -0
  47. package/dist/883.js.map +1 -0
  48. package/dist/89.js +1 -0
  49. package/dist/89.js.map +1 -0
  50. package/dist/892.js +1 -0
  51. package/dist/892.js.map +1 -0
  52. package/dist/895.js +1 -0
  53. package/dist/895.js.map +1 -0
  54. package/dist/913.js +2 -0
  55. package/dist/913.js.LICENSE.txt +32 -0
  56. package/dist/913.js.map +1 -0
  57. package/dist/924.js +1 -0
  58. package/dist/924.js.map +1 -0
  59. package/dist/943.js +1 -0
  60. package/dist/943.js.map +1 -0
  61. package/dist/99.js +2 -0
  62. package/dist/99.js.LICENSE.txt +5 -0
  63. package/dist/99.js.map +1 -0
  64. package/dist/kenyaemr-esm-procedure-orders-app.js +1 -0
  65. package/dist/kenyaemr-esm-procedure-orders-app.js.buildmanifest.json +786 -0
  66. package/dist/kenyaemr-esm-procedure-orders-app.js.map +1 -0
  67. package/dist/main.js +2 -0
  68. package/dist/main.js.LICENSE.txt +35 -0
  69. package/dist/main.js.map +1 -0
  70. package/dist/routes.json +1 -0
  71. package/jest.config.js +8 -0
  72. package/package.json +55 -0
  73. package/src/completed-list/completed-list.component.tsx +40 -0
  74. package/src/completed-list/completed-list.resource.ts +0 -0
  75. package/src/completed-list/completed-list.scss +223 -0
  76. package/src/components/create-dashboard-link.component.tsx +35 -0
  77. package/src/components/overlay/hook.ts +47 -0
  78. package/src/components/overlay/overlay.component.tsx +42 -0
  79. package/src/components/overlay/overlay.scss +92 -0
  80. package/src/config-schema.ts +78 -0
  81. package/src/constants.ts +5 -0
  82. package/src/declarations.d.ts +6 -0
  83. package/src/empty-state/empty-state-component.tsx +21 -0
  84. package/src/empty-state/empty-state.scss +23 -0
  85. package/src/form/post-procedures/post-procedure-form.component.tsx +468 -0
  86. package/src/form/post-procedures/post-procedure-form.scss +189 -0
  87. package/src/form/post-procedures/post-procedure.resource.tsx +71 -0
  88. package/src/form/procedures-orders/add-procedures-order/add-procedures-order.scss +44 -0
  89. package/src/form/procedures-orders/add-procedures-order/add-procedures-order.workspace.tsx +93 -0
  90. package/src/form/procedures-orders/add-procedures-order/procedures-order-form.component.tsx +476 -0
  91. package/src/form/procedures-orders/add-procedures-order/procedures-order-form.scss +80 -0
  92. package/src/form/procedures-orders/add-procedures-order/procedures-order.ts +17 -0
  93. package/src/form/procedures-orders/add-procedures-order/procedures-type-search.scss +115 -0
  94. package/src/form/procedures-orders/add-procedures-order/procedures-type-search.tsx +236 -0
  95. package/src/form/procedures-orders/add-procedures-order/useProceduresTypes.ts +93 -0
  96. package/src/form/procedures-orders/api.ts +282 -0
  97. package/src/form/procedures-orders/order-config.ts +48 -0
  98. package/src/form/procedures-orders/procedures-order-basket-panel/procedures-icon.component.tsx +39 -0
  99. package/src/form/procedures-orders/procedures-order-basket-panel/procedures-order-basket-item-tile.component.tsx +100 -0
  100. package/src/form/procedures-orders/procedures-order-basket-panel/procedures-order-basket-item-tile.scss +72 -0
  101. package/src/form/procedures-orders/procedures-order-basket-panel/procedures-order-basket-panel.extension.tsx +190 -0
  102. package/src/form/procedures-orders/procedures-order-basket-panel/procedures-order-basket-panel.scss +74 -0
  103. package/src/form/procedures-orders/procedures-order-basket-panel/procedures-order-basket.scss +55 -0
  104. package/src/header/procedure-header.component.tsx +32 -0
  105. package/src/header/procedure-header.scss +70 -0
  106. package/src/header/procedure-illustration.component.tsx +52 -0
  107. package/src/hooks/useOrdersWorklist.ts +70 -0
  108. package/src/hooks/useSearchGroupedResults.ts +22 -0
  109. package/src/hooks/useSearchResults.ts +39 -0
  110. package/src/index.ts +59 -0
  111. package/src/left-panel-link.tsx +40 -0
  112. package/src/not-done-list/not-done-list.component.tsx +44 -0
  113. package/src/not-done-list/not-done.scss +207 -0
  114. package/src/patient-chart/patient-procedure-order-results-table.resource.ts +43 -0
  115. package/src/patient-chart/patient-procedure-order-results.component.tsx +12 -0
  116. package/src/patient-chart/patient-procedure-order-results.resource.ts +485 -0
  117. package/src/patient-chart/patient-procedure-results.component.tsx +30 -0
  118. package/src/patient-chart/procedure-active-order/procedure-active-order-results.component.tsx +390 -0
  119. package/src/patient-chart/procedure-active-order/procedure-active-order-results.scss +78 -0
  120. package/src/patient-chart/procedure-order-referals/procedure-order-referals.component.tsx +394 -0
  121. package/src/patient-chart/procedure-order-referals/procedure-order-referals.resource.tsx +0 -0
  122. package/src/patient-chart/procedure-order-referals/procedure-order-referals.scss +78 -0
  123. package/src/patient-chart/procedure-past-test/laboratory-past-test-order-results.component.tsx +366 -0
  124. package/src/patient-chart/procedure-past-test/laboratory-past-test-order-results.scss +74 -0
  125. package/src/patient-chart/procedure-tabs/laboratory-order-tabs.component.tsx +44 -0
  126. package/src/patient-chart/procedure-tabs/laboratory-order-tabs.scss +7 -0
  127. package/src/patient-chart/procedure-workspaces/laboratory-referral.workspace.component.tsx +11 -0
  128. package/src/patient-chart/procedure-workspaces/laboratory-referral.workspace.scss +0 -0
  129. package/src/patient-chart/results-summary/print-results-summary.component.tsx +152 -0
  130. package/src/patient-chart/results-summary/print-results-summary.scss +80 -0
  131. package/src/patient-chart/results-summary/print-results-table.component.tsx +134 -0
  132. package/src/patient-chart/results-summary/results-summary.resource.tsx +174 -0
  133. package/src/patient-chart/results-summary/results-summary.scss +158 -0
  134. package/src/patient-chart/results-summary/send-email-dialog.component.tsx +59 -0
  135. package/src/patient-chart/results-summary/test-children-results.component.tsx +177 -0
  136. package/src/patient-chart/results-summary/test-print-results-table.component.tsx +105 -0
  137. package/src/patient-chart/results-summary/test-results-table.component.tsx +103 -0
  138. package/src/print/print-procedure-results.component.tsx +49 -0
  139. package/src/print/print-procedure.component.tsx +105 -0
  140. package/src/print/print-procedure.scss +98 -0
  141. package/src/procedure-tabs/completed-tab.component.tsx +12 -0
  142. package/src/procedure-tabs/not-done-tab.component.tsx +12 -0
  143. package/src/procedure-tabs/referred-tab.component.tsx +12 -0
  144. package/src/procedure-tabs/work-list-tab.component.tsx +13 -0
  145. package/src/procedure.component.tsx +24 -0
  146. package/src/procedures-ordered/_pick-procedure-request-menu.component.tsx +33 -0
  147. package/src/procedures-ordered/pick-procedure-order/add-to-worklist-dialog.component.tsx +105 -0
  148. package/src/procedures-ordered/pick-procedure-order/add-to-worklist-dialog.resource.ts +106 -0
  149. package/src/procedures-ordered/pick-procedure-order/add-to-worklist-dialog.scss +38 -0
  150. package/src/procedures-ordered/pick-procedure-request-menu.component.tsx +32 -0
  151. package/src/procedures-ordered/procedure-dialogs/add-to-worklist-dialog.component.tsx +300 -0
  152. package/src/procedures-ordered/procedure-dialogs/add-to-worklist-dialog.resource.ts +153 -0
  153. package/src/procedures-ordered/procedure-dialogs/add-to-worklist-dialog.scss +38 -0
  154. package/src/procedures-ordered/procedure-instructions/instructions.scss +24 -0
  155. package/src/procedures-ordered/procedure-instructions/procedure-instructions-menu.component.tsx +32 -0
  156. package/src/procedures-ordered/procedure-instructions/procedure-instructions.component.tsx +78 -0
  157. package/src/procedures-ordered/procedure-instructions/procedure-instructions.scss +24 -0
  158. package/src/procedures-ordered/procedure-queue.scss +211 -0
  159. package/src/procedures-ordered/procedure-tabs.component.tsx +104 -0
  160. package/src/procedures-ordered/procedure-tests/procedure-tests.component.tsx +83 -0
  161. package/src/procedures-ordered/procedure-tests/procedure-tests.resource.ts +14 -0
  162. package/src/procedures-ordered/procedure-tests/procedure-tests.scss +12 -0
  163. package/src/procedures-ordered/procedures-ordered-list.component.tsx +38 -0
  164. package/src/procedures-ordered/reject-order-dialog/reject-order-dialog.scss +14 -0
  165. package/src/procedures-ordered/reject-order-dialog/reject-procedure-order-dialog.component.tsx +98 -0
  166. package/src/procedures-ordered/reject-reason/procedure-reject-reason-menu.component.tsx +32 -0
  167. package/src/procedures-ordered/reject-reason/procedure-reject-reason.component.tsx +40 -0
  168. package/src/procedures-ordered/transition-patient-new-queue/transition-latest-queue-entry-button.component.tsx +42 -0
  169. package/src/procedures-ordered/transition-patient-new-queue/transition-latest-queue-entry-button.scss +14 -0
  170. package/src/procedures-ordered/transition-patient-new-queue/transition-latest-queue-entry-button.test.tsx +67 -0
  171. package/src/referred-procedures/referred-procedures.component.tsx +37 -0
  172. package/src/results/result-form-field.component.tsx +141 -0
  173. package/src/results/result-form.component.tsx +120 -0
  174. package/src/results/result-form.resource.ts +361 -0
  175. package/src/results/result-form.scss +22 -0
  176. package/src/root.component.tsx +16 -0
  177. package/src/routes.json +152 -0
  178. package/src/setup-tests.ts +7 -0
  179. package/src/shared/ui/common/action-button/action-button.component.tsx +68 -0
  180. package/src/shared/ui/common/action-button/action-button.scss +12 -0
  181. package/src/shared/ui/common/action-button/order-action-extension.component.tsx +21 -0
  182. package/src/shared/ui/common/grouped-orders-table.component.tsx +176 -0
  183. package/src/shared/ui/common/grouped-orders-table.scss +30 -0
  184. package/src/shared/ui/common/grouped-procedure-types.ts +47 -0
  185. package/src/shared/ui/common/list-order-details.component.tsx +171 -0
  186. package/src/shared/ui/common/list-order-details.resource.ts +41 -0
  187. package/src/shared/ui/common/list-order-details.scss +118 -0
  188. package/src/shared/ui/common/orders-date-range-picker.scss +15 -0
  189. package/src/shared/ui/common/orders-date-range-picker.tsx +38 -0
  190. package/src/summary-tiles/procedure-summary-tiles.component.tsx +36 -0
  191. package/src/summary-tiles/procedure-summary-tiles.scss +11 -0
  192. package/src/summary-tiles/procedure-summary.resource.tsx +79 -0
  193. package/src/summary-tiles/summary-tile.component.tsx +41 -0
  194. package/src/summary-tiles/summary-tile.scss +53 -0
  195. package/src/types/index.ts +661 -0
  196. package/src/types/patient-queue.ts +77 -0
  197. package/src/ui-components/overflow-menu.component.tsx +74 -0
  198. package/src/ui-components/overflow-menu.scss +39 -0
  199. package/src/utils/functions.ts +236 -0
  200. package/src/utils/orders-table/orders-data-table.component.tsx +129 -0
  201. package/src/utils/orders-table/orders-data-table.scss +50 -0
  202. package/src/work-list/work-list.component.tsx +38 -0
  203. package/src/work-list/work-list.resource.ts +26 -0
  204. package/src/work-list/work-list.scss +207 -0
  205. package/translations/en.json +141 -0
  206. package/tsconfig.json +5 -0
  207. package/webpack.config.js +1 -0
@@ -0,0 +1 @@
1
+ {"$schema":"https://json.openmrs.org/routes.schema.json","backendDependencies":{"fhir2":">=1.2","webservices.rest":"^2.24.0"},"extensions":[{"component":"procedureDashboardLink","name":"procedure-dashboard-link","meta":{"name":"procedure","title":"procedure","slot":"procedure-dashboard-slot"}},{"component":"root","name":"procedure-dashboard-root","slot":"procedure-dashboard-slot"},{"name":"procedures-ordered-tile-component","slot":"procedure-tiles-slot","component":"OrderedTileComponent","meta":{"name":"proceduresOrderedTileSlot","title":"Active Orders"}},{"name":"procedures-worklist-tile-component","slot":"procedure-tiles-slot","component":"worklistTileComponent","meta":{"name":"worklisTileSlot","title":"Worklist"}},{"name":"procedures-referred-tile-component","slot":"procedure-tiles-slot","component":"referredOutTileComponent","meta":{"name":"referredTileSlot","title":"Referred Out"}},{"name":"procedures-not-done-tile-component","slot":"procedure-tiles-slot","component":"notDoneTileComponent","meta":{"name":"notDoneTileSlot","title":"Not Done"}},{"name":"procedures-completed-tile-component","slot":"procedure-tiles-slot","component":"completedTileComponent","meta":{"name":"completedTileSlot","title":"Completed"}},{"name":"procedures-worklist-tab-component","slot":"procedures-panels-slot","component":"worklistProceduresTabComponent","meta":{"name":"proceduresPanelSlot","title":"Worklist"}},{"name":"procedures-referred-tab-component","slot":"procedures-panels-slot","component":"referredProceduresTabComponent","meta":{"name":"proceduresPanelSlot","title":"Referred Out"}},{"name":"procedures-not-done-tab-component","slot":"procedures-panels-slot","component":"notDoneProceduresTabComponent","meta":{"name":"proceduresPanelSlot","title":"Not Done"}},{"name":"procedures-completed-tab-component","slot":"procedures-panels-slot","component":"completedProceduresTabComponent","meta":{"name":"proceduresPanelSlot","title":"Completed"}},{"name":"procedure-instructions-modal","component":"procedureInstructionsModalComponent"},{"name":"procedure-reject-reason-modal","component":"procedureRejectModalComponent"},{"name":"add-procedure-to-worklist-dialog","component":"addProcedureToWorklistDialogComponent"},{"name":"reject-procedure-order-dialog","component":"rejectProcedureOrderDialogComponent"},{"name":"procedures-order-panel","component":"proceduresOrderPanel","slot":"order-basket-slot","order":4}],"workspaces":[{"name":"add-procedures-order","type":"order","title":"Add procedure order","component":"addProceduresOrderWorkspace"},{"name":"procedure-report-form","component":"postProcedureResults","title":"Procedure Report Form","type":"form"}],"modals":[{"name":"print-procedure-report-modal","component":"printProcedureReportModal"}],"pages":[{"component":"root","route":"procedure"}],"version":"1.0.2-pre.6"}
package/jest.config.js ADDED
@@ -0,0 +1,8 @@
1
+ const rootConfig = require('../../jest.config.js');
2
+
3
+ const packageConfig = {
4
+ ...rootConfig,
5
+ collectCoverage: false,
6
+ };
7
+
8
+ module.exports = packageConfig;
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@thrustdevs/esm-procedure-orders-app",
3
+ "version": "1.0.2-pre.6",
4
+ "description": "Procedure Orders app for KenyaEMR",
5
+ "browser": "dist/kenyaemr-esm-procedure-orders-app.js",
6
+ "main": "src/index.ts",
7
+ "source": true,
8
+ "license": "MPL-2.0",
9
+ "homepage": "https://github.com/palladiumkenya/kenyaemr-esm-core#readme",
10
+ "scripts": {
11
+ "start": "openmrs develop",
12
+ "serve": "webpack serve --mode=development",
13
+ "debug": "npm run serve",
14
+ "build": "webpack --mode production",
15
+ "analyze": "webpack --mode=production --env.analyze=true",
16
+ "lint": "eslint src --ext ts,tsx --ignore-pattern '**/*.test.ts' --ignore-pattern '**/*.test.tsx' --ignore-pattern '**/__tests__/**'",
17
+ "typescript": "tsc",
18
+ "extract-translations": "i18next 'src/**/*.component.tsx' 'src/index.ts' --config ../../tools/i18next-parser.config.js",
19
+ "test": "cross-env TZ=UTC jest --config jest.config.js --verbose false --passWithNoTests",
20
+ "test:watch": "cross-env TZ=UTC jest --watch --config jest.config.js",
21
+ "coverage": "yarn test --coverage"
22
+ },
23
+ "browserslist": [
24
+ "extends browserslist-config-openmrs"
25
+ ],
26
+ "keywords": [
27
+ "openmrs"
28
+ ],
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "git+https://github.com/palladiumkenya/kenyaemr-esm-core#readme"
35
+ },
36
+ "bugs": {
37
+ "url": "https://github.com/palladiumkenya/kenyaemr-esm-core/issues"
38
+ },
39
+ "dependencies": {
40
+ "lodash-es": "^4.17.15",
41
+ "react-to-print": "^2.14.13"
42
+ },
43
+ "peerDependencies": {
44
+ "@carbon/react": "^1.x",
45
+ "@openmrs/esm-framework": "6.x",
46
+ "react": "^18.1.0",
47
+ "react-i18next": "11.x",
48
+ "react-router-dom": "6.x",
49
+ "swr": "2.x"
50
+ },
51
+ "devDependencies": {
52
+ "webpack": "^5.74.0"
53
+ },
54
+ "stableVersion": "1.0.1"
55
+ }
@@ -0,0 +1,40 @@
1
+ import React from 'react';
2
+ import { useTranslation } from 'react-i18next';
3
+
4
+ import Overlay from '../components/overlay/overlay.component';
5
+ import { useOrdersWorklist } from '../hooks/useOrdersWorklist';
6
+ import GroupedOrdersTable from '../shared/ui/common/grouped-orders-table.component';
7
+ import { DataTableSkeleton } from '@carbon/react';
8
+
9
+ interface CompletedListProps {
10
+ fulfillerStatus: string;
11
+ }
12
+
13
+ export const CompletedList: React.FC<CompletedListProps> = ({ fulfillerStatus }) => {
14
+ const { t } = useTranslation();
15
+
16
+ const { workListEntries, isLoading } = useOrdersWorklist('COMPLETED', fulfillerStatus);
17
+
18
+ if (isLoading) {
19
+ return <DataTableSkeleton role="progressbar" />;
20
+ }
21
+
22
+ if (workListEntries?.length >= 0) {
23
+ return (
24
+ <>
25
+ <div>
26
+ <GroupedOrdersTable
27
+ orders={workListEntries}
28
+ showActions={false}
29
+ showStatus={true}
30
+ showOrderType={true}
31
+ showStartButton={false}
32
+ title={t('completedOrders', 'Completed Orders')}
33
+ actions={[]}
34
+ />
35
+ </div>
36
+ <Overlay />
37
+ </>
38
+ );
39
+ }
40
+ };
File without changes
@@ -0,0 +1,223 @@
1
+ @use '@carbon/styles/scss/spacing';
2
+ @use '@carbon/styles/scss/type';
3
+ @use '@openmrs/esm-styleguide/src/vars' as vars;
4
+
5
+ title {
6
+ width: 6.938rem;
7
+ height: 1.75rem;
8
+ margin: 0.438rem 22.875rem 0.813rem 0;
9
+ font-family: IBMPlexSans;
10
+ font-size: 1.25rem;
11
+ font-weight: normal;
12
+ font-stretch: normal;
13
+ font-style: normal;
14
+ line-height: 1.4;
15
+ letter-spacing: normal;
16
+ }
17
+
18
+ .link {
19
+ text-decoration: none;
20
+ }
21
+
22
+ .breadcrumbsSlot {
23
+ grid-row: 1 / 2;
24
+ grid-column: 1 / 2;
25
+ }
26
+
27
+ .orderTabsContainer {
28
+ height: 100%;
29
+ width: 100%;
30
+
31
+ :global(.cds--tab-content) {
32
+ padding: 0 !important;
33
+ }
34
+ }
35
+
36
+ .orderTabs {
37
+ grid-column: 'span 2';
38
+ padding: 0 spacing.$spacing-05;
39
+ }
40
+
41
+ .newListButton {
42
+ width: fit-content;
43
+ justify-self: end;
44
+ align-self: center;
45
+ }
46
+
47
+ .tabsContainer {
48
+ background-color: vars.$ui-02;
49
+
50
+ :global(.cds--tabs__nav-item--selected) {
51
+ box-shadow: inset 0 2px 0 0 var(--brand-03) !important;
52
+ }
53
+
54
+ :global(.cds--tab--list) button {
55
+ max-width: 12rem !important;
56
+ }
57
+ }
58
+
59
+ .hiddenTabsContent,
60
+ .tabs .hiddenTabsContent {
61
+ display: none;
62
+ }
63
+
64
+ .patientListTableContainer {
65
+ grid-row: 3 / 4;
66
+ grid-column: 1 / 2;
67
+ height: 100%;
68
+ margin: 0.5rem spacing.$spacing-05;
69
+ background-color: vars.$ui-01;
70
+ border: 0.5px solid #e0e0e0;
71
+
72
+ :global(.cds--data-table-container) {
73
+ padding-top: 0 !important;
74
+ }
75
+
76
+ tbody > tr > :nth-child(2) {
77
+ white-space: nowrap;
78
+ }
79
+
80
+ :global(.cds--data-table td) {
81
+ height: unset !important;
82
+ }
83
+
84
+ :global(.cds--data-table--zebra) tbody tr[data-parent-row]:nth-child(4n + 1) td {
85
+ background-color: vars.$ui-02;
86
+ border-bottom: 1px solid vars.$ui-03;
87
+ border-top: 1px solid vars.$ui-03;
88
+ }
89
+
90
+ :global(.cds--data-table--zebra) tbody tr[data-parent-row]:nth-child(4n + 3) td {
91
+ background-color: vars.$ui-01;
92
+ border-bottom: 1px solid vars.$ui-03;
93
+ }
94
+ }
95
+
96
+ .tableContainer {
97
+ background-color: vars.$ui-01;
98
+ margin: 0 spacing.$spacing-05;
99
+ padding: 0;
100
+
101
+ a {
102
+ text-decoration: none;
103
+ }
104
+
105
+ th {
106
+ color: vars.$text-02;
107
+ }
108
+
109
+ :global(.cds--data-table) {
110
+ background-color: vars.$ui-03;
111
+ }
112
+
113
+ .toolbarContent {
114
+ height: spacing.$spacing-07;
115
+ margin-bottom: spacing.$spacing-02;
116
+ }
117
+ }
118
+
119
+ .activePatientsTable tr:last-of-type {
120
+ td {
121
+ border-bottom: none;
122
+ }
123
+ }
124
+
125
+ .searchContainer {
126
+ display: flex;
127
+ align-items: center;
128
+ flex-direction: row-reverse;
129
+ padding-top: 0.5rem;
130
+
131
+ :global(.cds--search-magnifier-icon) {
132
+ z-index: 0 !important;
133
+ }
134
+
135
+ input {
136
+ background-color: #fff;
137
+ }
138
+ }
139
+
140
+ .addOrderBtn {
141
+ width: 10rem !important;
142
+ padding: 0.5rem !important;
143
+ margin-left: 1rem;
144
+ margin-right: 1rem;
145
+ }
146
+
147
+ .patientSearch {
148
+ width: 25rem;
149
+ border-bottom-color: vars.$ui-03;
150
+ }
151
+
152
+ .locationFilter {
153
+ width: 25rem;
154
+ }
155
+
156
+ .search {
157
+ width: 100%;
158
+ max-width: 16rem;
159
+ background-color: vars.$ui-02;
160
+ border-bottom-color: vars.$ui-03;
161
+ }
162
+
163
+ .container {
164
+ background-color: vars.$ui-01;
165
+ }
166
+
167
+ .expandedLabQueueVisitRow {
168
+ :global(.cds--tab-content) {
169
+ padding: 0.5rem 0;
170
+ }
171
+
172
+ td {
173
+ padding: 0.5rem;
174
+
175
+ > div {
176
+ max-height: max-content !important;
177
+ background-color: vars.$ui-02;
178
+ }
179
+ }
180
+
181
+ th[colspan] td[colspan] > div:first-child {
182
+ padding: 0 1rem;
183
+ }
184
+ }
185
+
186
+ .tableLayerSearch {
187
+ margin: 5px;
188
+ padding: 10px;
189
+ }
190
+
191
+ .dropDownContainer {
192
+ padding: 10px;
193
+ }
194
+
195
+ .toolbar {
196
+ position: static;
197
+ height: 3rem;
198
+ overflow: visible;
199
+ background-color: color;
200
+ }
201
+
202
+ .tileContainer {
203
+ background-color: vars.$ui-02;
204
+ border-top: 1px solid vars.$ui-03;
205
+ padding: 5rem 0;
206
+ }
207
+
208
+ .tile {
209
+ margin: auto;
210
+ width: fit-content;
211
+ }
212
+
213
+ .tileContent {
214
+ display: flex;
215
+ flex-direction: column;
216
+ align-items: center;
217
+ }
218
+
219
+ .content {
220
+ @include type.type-style('heading-compact-02');
221
+ color: vars.$text-02;
222
+ margin-bottom: 0.5rem;
223
+ }
@@ -0,0 +1,35 @@
1
+ import React, { useMemo } from 'react';
2
+ import { ConfigurableLink } from '@openmrs/esm-framework';
3
+ import { BrowserRouter, useLocation } from 'react-router-dom';
4
+
5
+ export interface DashboardLinkConfig {
6
+ name: string;
7
+ title: string;
8
+ slot?: string;
9
+ }
10
+
11
+ function DashboardExtension({ dashboardLinkConfig }: { dashboardLinkConfig: DashboardLinkConfig }) {
12
+ const { name, title } = dashboardLinkConfig;
13
+ const location = useLocation();
14
+ const spaBasePath = `${window.spaBase}/home`;
15
+
16
+ const navLink = useMemo(() => {
17
+ const pathArray = location.pathname.split('/home');
18
+ const lastElement = pathArray[pathArray.length - 1];
19
+ return decodeURIComponent(lastElement);
20
+ }, [location.pathname]);
21
+
22
+ return (
23
+ <ConfigurableLink
24
+ to={`${spaBasePath}/${name}`}
25
+ className={`cds--side-nav__link ${navLink.match(name) && 'active-left-nav-link'}`}>
26
+ {title}
27
+ </ConfigurableLink>
28
+ );
29
+ }
30
+
31
+ export const createHomeDashboardLink = (dashboardLinkConfig: DashboardLinkConfig) => () => (
32
+ <BrowserRouter>
33
+ <DashboardExtension dashboardLinkConfig={dashboardLinkConfig} />
34
+ </BrowserRouter>
35
+ );
@@ -0,0 +1,47 @@
1
+ import { getGlobalStore } from '@openmrs/esm-framework';
2
+ import { useEffect, useState } from 'react';
3
+
4
+ interface OverlayStore {
5
+ isOverlayOpen: boolean;
6
+ component?: any;
7
+ header: string;
8
+ }
9
+
10
+ const initialState = { isOverlayOpen: false, component: Function, header: '' };
11
+
12
+ const getOverlayStore = () => {
13
+ return getGlobalStore('laboratory', initialState);
14
+ };
15
+
16
+ export const launchOverlay = (headerTitle: string, componentToRender) => {
17
+ const store = getOverlayStore();
18
+ store.setState({
19
+ isOverlayOpen: true,
20
+ component: componentToRender,
21
+ header: headerTitle,
22
+ });
23
+ };
24
+
25
+ export const closeOverlay = () => {
26
+ const store = getOverlayStore();
27
+ store.setState({ component: null, isOverlayOpen: false });
28
+ };
29
+
30
+ export const useOverlay = () => {
31
+ const [overlay, setOverlay] = useState<OverlayStore>();
32
+
33
+ useEffect(() => {
34
+ function update(state: OverlayStore) {
35
+ setOverlay(state);
36
+ }
37
+
38
+ update(getOverlayStore().getState());
39
+ getOverlayStore().subscribe(update);
40
+ }, []);
41
+
42
+ return {
43
+ isOverlayOpen: overlay?.isOverlayOpen,
44
+ component: overlay?.component,
45
+ header: overlay?.header,
46
+ };
47
+ };
@@ -0,0 +1,42 @@
1
+ import React from 'react';
2
+ import { Button, Header } from '@carbon/react';
3
+ import { ArrowLeft, Close } from '@carbon/react/icons';
4
+ import { useLayoutType } from '@openmrs/esm-framework';
5
+ import styles from './overlay.scss';
6
+ import { useTranslation } from 'react-i18next';
7
+ import { closeOverlay, useOverlay } from './hook';
8
+
9
+ const Overlay: React.FC = () => {
10
+ const { header, component, isOverlayOpen } = useOverlay();
11
+ const layout = useLayoutType();
12
+ const { t } = useTranslation();
13
+ return (
14
+ <>
15
+ {isOverlayOpen && (
16
+ <div className={layout !== 'tablet' ? styles.desktopOverlay : styles.tabletOverlay}>
17
+ {layout !== 'tablet' ? (
18
+ <div className={styles.desktopHeader}>
19
+ <div className={styles.headerContent}>{header}</div>
20
+ <Button className={styles.closePanelButton} onClick={() => closeOverlay()} kind="ghost" hasIconOnly>
21
+ <Close size={16} />
22
+ </Button>
23
+ </div>
24
+ ) : (
25
+ <Header
26
+ onClick={() => closeOverlay()}
27
+ aria-label={t('tabletOverlay', 'Tablet overlay')}
28
+ className={styles.tabletOverlayHeader}>
29
+ <Button hasIconOnly>
30
+ <ArrowLeft size={16} />
31
+ </Button>
32
+ <div className={styles.headerContent}>{header}</div>
33
+ </Header>
34
+ )}
35
+ <div>{component}</div>
36
+ </div>
37
+ )}
38
+ </>
39
+ );
40
+ };
41
+
42
+ export default Overlay;
@@ -0,0 +1,92 @@
1
+ @use '@carbon/styles/scss/spacing';
2
+ @use '@carbon/styles/scss/type';
3
+ @use '@openmrs/esm-styleguide/src/vars' as vars;
4
+
5
+ .desktopOverlay {
6
+ position: fixed;
7
+ top: spacing.$spacing-09;
8
+ width: 37rem;
9
+ right: 0;
10
+ bottom: 0;
11
+ border-left: 1px solid vars.$text-03;
12
+ background-color: vars.$ui-01;
13
+ overflow-y: auto;
14
+ height: calc(100vh - 3rem);
15
+ }
16
+
17
+ .desktopOverlay::after {
18
+ height: 100%;
19
+ border-left: 1px solid vars.$text-03;
20
+ }
21
+
22
+ .tabletOverlay {
23
+ position: fixed;
24
+ top: 0;
25
+ bottom: 0;
26
+ left: 0;
27
+ right: 0;
28
+ z-index: 9999;
29
+ background-color: vars.$ui-01;
30
+ overflow-y: scroll;
31
+ -ms-overflow-style: none;
32
+ scrollbar-width: none;
33
+
34
+ &::-webkit-scrollbar {
35
+ width: 0;
36
+ }
37
+
38
+ & > div {
39
+ margin-top: spacing.$spacing-09;
40
+ }
41
+ }
42
+
43
+ .tabletOverlayHeader {
44
+ button {
45
+ @include vars.brand-01(background-color);
46
+ }
47
+
48
+ .headerContent {
49
+ color: vars.$ui-02;
50
+ }
51
+ }
52
+
53
+ .desktopHeader {
54
+ display: flex;
55
+ justify-content: space-between;
56
+ align-items: center;
57
+ background-color: vars.$ui-03;
58
+ border-bottom: 1px solid vars.$text-03;
59
+ position: sticky;
60
+ position: -webkit-sticky;
61
+ width: 100%;
62
+ z-index: 1000;
63
+ top: 0;
64
+ }
65
+
66
+ .headerContent {
67
+ @include type.type-style('heading-compact-02');
68
+ padding: 0 spacing.$spacing-05;
69
+ color: vars.$ui-05;
70
+ }
71
+
72
+ .closeButton {
73
+ background-color: vars.$ui-background;
74
+ color: vars.$ui-05;
75
+ fill: vars.$ui-05;
76
+ }
77
+
78
+ /* Desktop */
79
+ :global(.omrs-breakpoint-gt-tablet) {
80
+ .overlayContent {
81
+ padding: 0 0 0 0;
82
+ overflow-y: auto;
83
+ }
84
+ }
85
+
86
+ /* Tablet */
87
+ :global(.omrs-breakpoint-lt-desktop) {
88
+ .overlayContent {
89
+ padding: 0 0 0 0;
90
+ overflow-y: auto;
91
+ }
92
+ }
@@ -0,0 +1,78 @@
1
+ import { Type } from '@openmrs/esm-framework';
2
+
3
+ export const configSchema = {
4
+ procedureOrderTypeUuid: {
5
+ _type: Type.String,
6
+ _description: 'Procedure Order type UUID',
7
+ _default: 'b4a7c280-369e-4d12-9ce8-18e36783fed6',
8
+ },
9
+ procedureConceptSetUuid: {
10
+ _type: Type.String,
11
+ _description: 'Procedure Concept SET UUID',
12
+ _default: '165418AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
13
+ },
14
+ testOrderTypeUuid: {
15
+ _type: Type.String,
16
+ _description: 'Test Order type UUID',
17
+ _default: '52a447d3-a64a-11e3-9aeb-50e549534c5e',
18
+ },
19
+ orders: {
20
+ _type: Type.Object,
21
+ _description: 'List of lab orderable concepts',
22
+ _default: {
23
+ labOrderableConcepts: [],
24
+ labOrderTypeUuid: '',
25
+ },
26
+ },
27
+ conditionConceptClassUuid: {
28
+ _type: Type.ConceptUuid,
29
+ _description: 'The concept class UUID for conditions',
30
+ _default: '8d4918b0-c2cc-11de-8d13-0010c6dffd0f',
31
+ },
32
+ procedureComplicationGroupingConceptUuid: {
33
+ _type: Type.ConceptUuid,
34
+ _description: 'The concept UUID for grouping procedure complications obs',
35
+ _default: '120202AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
36
+ },
37
+ procedureComplicationConceptUuid: {
38
+ _type: Type.ConceptUuid,
39
+ _description: 'The concept UUID for capturing procedure complications',
40
+ _default: '120198AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
41
+ },
42
+ procedureResultEncounterType: {
43
+ _type: Type.String,
44
+ _description: 'The procedure results encounter type UUID',
45
+ _default: '99a7a6ba-59f4-484e-880d-01cbeaead62f',
46
+ },
47
+ procedureResultEncounterRole: {
48
+ _type: Type.String,
49
+ _description: 'The encounter provider role UUID',
50
+ _default: 'a0b03050-c99b-11e0-9572-0800200c9a66',
51
+ },
52
+ };
53
+
54
+ export interface OrderReason {
55
+ labTestUuid: string;
56
+ required: boolean;
57
+ orderReasons: Array<string>;
58
+ }
59
+
60
+ export interface ConfigObject {
61
+ procedureOrderTypeUuid: string;
62
+ procedureConceptSetUuid: string;
63
+ testOrderTypeUuid: string;
64
+ labTestsWithOrderReasons: Array<OrderReason>;
65
+ showPrintButton: boolean;
66
+ orders: {
67
+ labOrderTypeUuid: string;
68
+ labOrderableConcepts: Array<string>;
69
+ };
70
+ conditionConceptClassUuid: string;
71
+ procedureComplicationGroupingConceptUuid: string;
72
+ procedureComplicationConceptUuid: string;
73
+ procedureResultEncounterType: string;
74
+ procedureResultEncounterRole: string;
75
+ }
76
+
77
+ export const StringPath =
78
+ 'M24 9.4L22.6 8 16 14.6 9.4 8 8 9.4 14.6 16 8 22.6 9.4 24 16 17.4 22.6 24 24 22.6 17.4 16 24 9.4z';
@@ -0,0 +1,5 @@
1
+ export const spaPath = window.getOpenmrsSpaBase();
2
+ export const basePath = `${spaPath}home/procedure`;
3
+ export const moduleName = '@openmrs/esm-procedure-app';
4
+ export const ProcedureConceptClass_UUID = '8d490bf4-c2cc-11de-8d13-0010c6dffd0f';
5
+ export const ServiceConceptSet_UUID = '330c0ec6-0ac7-4b86-9c70-29d76f0ae20a';
@@ -0,0 +1,6 @@
1
+ declare module '@carbon/react';
2
+ declare module '*.css';
3
+ declare module '*.scss';
4
+ declare module '*.png';
5
+
6
+ declare type SideNavProps = object;
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ import { useTranslation } from 'react-i18next';
3
+ import styles from './empty-state.scss';
4
+ import { EmptyDataIllustration } from '@openmrs/esm-patient-common-lib';
5
+
6
+ interface EmptyStateProps {
7
+ subTitle: string;
8
+ }
9
+
10
+ const EmptyState: React.FC<EmptyStateProps> = ({ subTitle }) => {
11
+ const { t } = useTranslation();
12
+
13
+ return (
14
+ <div className={styles.emptyStateContainer}>
15
+ <EmptyDataIllustration />
16
+ <p className={styles.subTitle}>{subTitle}</p>
17
+ </div>
18
+ );
19
+ };
20
+
21
+ export default EmptyState;
@@ -0,0 +1,23 @@
1
+ @use '@carbon/colors';
2
+ @use '@carbon/layout';
3
+ @use '@carbon/type';
4
+
5
+ .emptyStateContainer {
6
+ display: flex;
7
+ flex-direction: column;
8
+ align-items: center;
9
+ justify-content: center;
10
+ min-height: 300px;
11
+ background-color: colors.$white;
12
+ row-gap: layout.$spacing-02;
13
+
14
+ & form {
15
+ border: none;
16
+ }
17
+
18
+ .subTitle {
19
+ @include type.type-style('body-compact-01');
20
+ color: colors.$cool-gray-70;
21
+ font-weight: bold;
22
+ }
23
+ }