@openmrs/esm-laboratory-app 1.0.1-pre.106

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 (157) hide show
  1. package/.editorconfig +12 -0
  2. package/.eslintignore +2 -0
  3. package/.eslintrc +32 -0
  4. package/.husky/pre-commit +4 -0
  5. package/.husky/pre-push +6 -0
  6. package/.prettierignore +14 -0
  7. package/.turbo/turbo-build.log +30 -0
  8. package/.turbo/turbo-lint.log +12 -0
  9. package/.turbo/turbo-typescript.log +0 -0
  10. package/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +541 -0
  11. package/.yarn/plugins/@yarnpkg/plugin-outdated.cjs +35 -0
  12. package/.yarn/plugins/@yarnpkg/plugin-version.cjs +550 -0
  13. package/.yarn/versions/3d4697b8.yml +0 -0
  14. package/README.md +39 -0
  15. package/__mocks__/react-i18next.js +50 -0
  16. package/assets/logo/logo.png +0 -0
  17. package/assets/logo/moh_logo_without_word.png +0 -0
  18. package/assets/screenshots/labs_enter_results.png +0 -0
  19. package/assets/screenshots/labs_general_dashboard.png +0 -0
  20. package/dist/142.js +1 -0
  21. package/dist/142.js.map +1 -0
  22. package/dist/319.js +1 -0
  23. package/dist/36.js +1 -0
  24. package/dist/36.js.map +1 -0
  25. package/dist/395.js +1 -0
  26. package/dist/395.js.map +1 -0
  27. package/dist/453.js +1 -0
  28. package/dist/453.js.map +1 -0
  29. package/dist/533.js +1 -0
  30. package/dist/533.js.map +1 -0
  31. package/dist/56.js +2 -0
  32. package/dist/56.js.LICENSE.txt +32 -0
  33. package/dist/56.js.map +1 -0
  34. package/dist/572.js +1 -0
  35. package/dist/572.js.map +1 -0
  36. package/dist/574.js +1 -0
  37. package/dist/581.js +1 -0
  38. package/dist/581.js.map +1 -0
  39. package/dist/66.js +1 -0
  40. package/dist/66.js.map +1 -0
  41. package/dist/757.js +1 -0
  42. package/dist/769.js +1 -0
  43. package/dist/769.js.map +1 -0
  44. package/dist/770.js +1 -0
  45. package/dist/770.js.map +1 -0
  46. package/dist/800.js +2 -0
  47. package/dist/800.js.LICENSE.txt +3 -0
  48. package/dist/800.js.map +1 -0
  49. package/dist/809.js +1 -0
  50. package/dist/809.js.map +1 -0
  51. package/dist/889.js +1 -0
  52. package/dist/889.js.map +1 -0
  53. package/dist/894.js +2 -0
  54. package/dist/894.js.LICENSE.txt +48 -0
  55. package/dist/894.js.map +1 -0
  56. package/dist/924.js +1 -0
  57. package/dist/924.js.map +1 -0
  58. package/dist/928.js +1 -0
  59. package/dist/928.js.map +1 -0
  60. package/dist/967b98e46b0984c4.png +0 -0
  61. package/dist/97.js +1 -0
  62. package/dist/97.js.map +1 -0
  63. package/dist/983.js +1 -0
  64. package/dist/983.js.map +1 -0
  65. package/dist/main.js +2 -0
  66. package/dist/main.js.LICENSE.txt +48 -0
  67. package/dist/main.js.map +1 -0
  68. package/dist/openmrs-esm-laboratory-app.js +1 -0
  69. package/dist/openmrs-esm-laboratory-app.js.buildmanifest.json +628 -0
  70. package/dist/openmrs-esm-laboratory-app.js.map +1 -0
  71. package/dist/routes.json +1 -0
  72. package/i18next-parser.config.js +89 -0
  73. package/jest.config.js +16 -0
  74. package/package.json +121 -0
  75. package/src/completed-list/completed-list.component.tsx +242 -0
  76. package/src/completed-list/completed-list.resource.ts +0 -0
  77. package/src/completed-list/completed-list.scss +232 -0
  78. package/src/components/create-dashboard-link.component.tsx +44 -0
  79. package/src/components/overlay/hook.ts +47 -0
  80. package/src/components/overlay/overlay.component.tsx +52 -0
  81. package/src/components/overlay/overlay.scss +93 -0
  82. package/src/config-schema.ts +36 -0
  83. package/src/constants.ts +5 -0
  84. package/src/declarations.d.ts +6 -0
  85. package/src/header/laboratory-header.component.tsx +35 -0
  86. package/src/header/laboratory-header.scss +68 -0
  87. package/src/header/laboratory-illustration.component.tsx +13 -0
  88. package/src/index.ts +92 -0
  89. package/src/laboratory.component.tsx +18 -0
  90. package/src/patient-chart/laboratory-item/view-laboratory-item.component.tsx +39 -0
  91. package/src/patient-chart/laboratory-item/view-laboratory-item.resource.ts +290 -0
  92. package/src/patient-chart/laboratory-item/view-laboratory-item.scss +0 -0
  93. package/src/patient-chart/laboratory-order.component.tsx +453 -0
  94. package/src/patient-chart/laboratory-order.resource.ts +437 -0
  95. package/src/patient-chart/laboratory-order.scss +66 -0
  96. package/src/patient-chart/results-summary/print-results-summary.component.tsx +240 -0
  97. package/src/patient-chart/results-summary/print-results-summary.scss +105 -0
  98. package/src/patient-chart/results-summary/print-results-table.component.tsx +163 -0
  99. package/src/patient-chart/results-summary/results/results.component.tsx +25 -0
  100. package/src/patient-chart/results-summary/results/results.resource.ts +50 -0
  101. package/src/patient-chart/results-summary/results/results.scss +0 -0
  102. package/src/patient-chart/results-summary/results-dialog/edit-results-dialog.component.tsx +46 -0
  103. package/src/patient-chart/results-summary/results-summary.component.tsx +98 -0
  104. package/src/patient-chart/results-summary/results-summary.resource.tsx +185 -0
  105. package/src/patient-chart/results-summary/results-summary.scss +154 -0
  106. package/src/patient-chart/results-summary/send-email-dialog.component.tsx +111 -0
  107. package/src/patient-chart/results-summary/test-children-results.component.tsx +221 -0
  108. package/src/patient-chart/results-summary/test-print-results-table.component.tsx +148 -0
  109. package/src/patient-chart/results-summary/test-results-delete-action-menu.component.tsx +27 -0
  110. package/src/patient-chart/results-summary/test-results-rescend-action-menu.component.tsx +26 -0
  111. package/src/patient-chart/results-summary/test-results-table.component.tsx +153 -0
  112. package/src/patient-chart/results-summary/tests-children-detail.component.tsx +54 -0
  113. package/src/patient-chart/results-summary/views/email.handlebars +13 -0
  114. package/src/queue-list/lab-dialogs/add-to-worklist-dialog.component.tsx +323 -0
  115. package/src/queue-list/lab-dialogs/add-to-worklist-dialog.resource.ts +155 -0
  116. package/src/queue-list/lab-dialogs/add-to-worklist-dialog.scss +20 -0
  117. package/src/queue-list/lab-tests/lab-tests.component.tsx +116 -0
  118. package/src/queue-list/lab-tests/lab-tests.resource.ts +17 -0
  119. package/src/queue-list/lab-tests/lab-tests.scss +12 -0
  120. package/src/queue-list/laboratory-patient-list.component.tsx +277 -0
  121. package/src/queue-list/laboratory-patient-list.resource.ts +86 -0
  122. package/src/queue-list/laboratory-queue.component.tsx +120 -0
  123. package/src/queue-list/laboratory-queue.scss +213 -0
  124. package/src/queue-list/laboratory-tabs.component.tsx +81 -0
  125. package/src/queue-list/pick-lab-request-menu.component.tsx +38 -0
  126. package/src/reject-order/reject-order-dialog.component.tsx +114 -0
  127. package/src/reject-order/reject-order-dialog.resource.ts +14 -0
  128. package/src/reject-order/reject-order-dialog.scss +14 -0
  129. package/src/results/result-form.component.tsx +223 -0
  130. package/src/results/result-form.resource.ts +328 -0
  131. package/src/results/result-form.scss +19 -0
  132. package/src/review-list/dialog/review-item.component.tsx +283 -0
  133. package/src/review-list/dialog/review-item.resource.ts +14 -0
  134. package/src/review-list/dialog/review-item.scss +0 -0
  135. package/src/review-list/review-list.component.tsx +277 -0
  136. package/src/review-list/review-list.resource.ts +0 -0
  137. package/src/review-list/review-list.scss +189 -0
  138. package/src/root.component.tsx +15 -0
  139. package/src/root.scss +50 -0
  140. package/src/routes.json +72 -0
  141. package/src/setup-tests.ts +1 -0
  142. package/src/summary-tiles/laboratory-summary-tiles.component.tsx +53 -0
  143. package/src/summary-tiles/laboratory-summary-tiles.scss +12 -0
  144. package/src/summary-tiles/laboratory-summary.resource.tsx +50 -0
  145. package/src/summary-tiles/summary-tile.component.tsx +48 -0
  146. package/src/summary-tiles/summary-tile.scss +43 -0
  147. package/src/types/index.ts +412 -0
  148. package/src/types/patient-queues.ts +189 -0
  149. package/src/utils/functions.ts +246 -0
  150. package/src/work-list/work-list.component.tsx +310 -0
  151. package/src/work-list/work-list.resource.ts +136 -0
  152. package/src/work-list/work-list.scss +215 -0
  153. package/translations/en.json +16 -0
  154. package/translations/es.json +3 -0
  155. package/translations/fr.json +3 -0
  156. package/tsconfig.json +23 -0
  157. package/webpack.config.js +29 -0
@@ -0,0 +1,310 @@
1
+ import React, {
2
+ useState,
3
+ useMemo,
4
+ AnchorHTMLAttributes,
5
+ useCallback,
6
+ } from "react";
7
+ import { useTranslation } from "react-i18next";
8
+ import { EmptyState, ErrorState } from "@openmrs/esm-patient-common-lib";
9
+ import { Microscope, TrashCan } from "@carbon/react/icons";
10
+
11
+ import {
12
+ DataTable,
13
+ DataTableHeader,
14
+ DataTableSkeleton,
15
+ Pagination,
16
+ Table,
17
+ TableBody,
18
+ TableCell,
19
+ TableContainer,
20
+ TableExpandHeader,
21
+ TableExpandRow,
22
+ TableHead,
23
+ TableHeader,
24
+ TableRow,
25
+ TabPanel,
26
+ TableToolbar,
27
+ TableToolbarContent,
28
+ TableToolbarSearch,
29
+ Layer,
30
+ Tag,
31
+ TableExpandedRow,
32
+ Button,
33
+ Tile,
34
+ DatePicker,
35
+ DatePickerInput,
36
+ Select,
37
+ SelectItem,
38
+ } from "@carbon/react";
39
+ import { Result, useGetOrdersWorklist } from "./work-list.resource";
40
+ import styles from "./work-list.scss";
41
+ import {
42
+ formatDate,
43
+ parseDate,
44
+ showModal,
45
+ usePagination,
46
+ } from "@openmrs/esm-framework";
47
+ import { launchOverlay } from "../components/overlay/hook";
48
+ import ResultForm from "../results/result-form.component";
49
+ import { getStatusColor } from "../utils/functions";
50
+
51
+ interface WorklistProps {
52
+ fulfillerStatus: string;
53
+ }
54
+
55
+ interface ResultsOrderProps {
56
+ order: Result;
57
+ patientUuid: string;
58
+ }
59
+
60
+ interface RejectOrderProps {
61
+ order: Result;
62
+ }
63
+
64
+ const WorkList: React.FC<WorklistProps> = ({ fulfillerStatus }) => {
65
+ const { t } = useTranslation();
66
+
67
+ const [activatedOnOrAfterDate, setActivatedOnOrAfterDate] = useState("");
68
+
69
+ const { workListEntries, isLoading } = useGetOrdersWorklist(
70
+ activatedOnOrAfterDate,
71
+ fulfillerStatus
72
+ );
73
+
74
+ const pageSizes = [5, 10, 15, 20, 25, 30, 35, 40, 45, 50];
75
+ const [currentPageSize, setPageSize] = useState(10);
76
+
77
+ const {
78
+ goTo,
79
+ results: paginatedWorkListEntries,
80
+ currentPage,
81
+ } = usePagination(workListEntries, currentPageSize);
82
+
83
+ const RejectOrder: React.FC<RejectOrderProps> = ({ order }) => {
84
+ const launchRejectOrderModal = useCallback(() => {
85
+ const dispose = showModal("reject-order-dialog", {
86
+ closeModal: () => dispose(),
87
+ order,
88
+ });
89
+ }, [order]);
90
+ return (
91
+ <Button
92
+ kind="ghost"
93
+ onClick={launchRejectOrderModal}
94
+ renderIcon={(props) => <TrashCan size={16} {...props} />}
95
+ />
96
+ );
97
+ };
98
+
99
+ // get picked orders
100
+ let columns = [
101
+ { id: 0, header: t("date", "Date"), key: "date" },
102
+
103
+ { id: 1, header: t("orderNumber", "Order Number"), key: "orderNumber" },
104
+ { id: 2, header: t("patient", "Patient"), key: "patient" },
105
+
106
+ {
107
+ id: 3,
108
+ header: t("accessionNumber", "Accession Number"),
109
+ key: "accessionNumber",
110
+ },
111
+ { id: 4, header: t("test", "Test"), key: "test" },
112
+ { id: 5, header: t("action", "Action"), key: "action" },
113
+ { id: 6, header: t("status", "Status"), key: "status" },
114
+ { id: 8, header: t("orderer", "Orderer"), key: "orderer" },
115
+ { id: 9, header: t("urgency", "Urgency"), key: "urgency" },
116
+ { id: 10, header: t("actions", "Actions"), key: "actions" },
117
+ ];
118
+
119
+ const ResultsOrder: React.FC<ResultsOrderProps> = ({
120
+ order,
121
+ patientUuid,
122
+ }) => {
123
+ return (
124
+ <Button
125
+ kind="ghost"
126
+ onClick={() => {
127
+ launchOverlay(
128
+ t("resultForm", "Result Tests"),
129
+ <ResultForm patientUuid={patientUuid} order={order} />
130
+ );
131
+ }}
132
+ renderIcon={(props) => <Microscope size={16} {...props} />}
133
+ />
134
+ );
135
+ };
136
+
137
+ const tableRows = useMemo(() => {
138
+ return paginatedWorkListEntries
139
+ ?.filter((item) => item.action === "REVISE")
140
+ .map((entry, index) => ({
141
+ ...entry,
142
+ id: entry.uuid,
143
+ date: {
144
+ content: (
145
+ <>
146
+ <span>{formatDate(parseDate(entry.dateActivated))}</span>
147
+ </>
148
+ ),
149
+ },
150
+ patient: {
151
+ content: (
152
+ <>
153
+ <span>{entry.patient.display.split("-")[1]}</span>
154
+ </>
155
+ ),
156
+ },
157
+ orderNumber: { content: <span>{entry.orderNumber}</span> },
158
+ accessionNumber: { content: <span>{entry.accessionNumber}</span> },
159
+ test: { content: <span>{entry.concept.display}</span> },
160
+ action: { content: <span>{entry.action}</span> },
161
+ status: {
162
+ content: (
163
+ <>
164
+ <Tag>
165
+ <span
166
+ className={styles.statusContainer}
167
+ style={{ color: `${getStatusColor(entry.fulfillerStatus)}` }}
168
+ >
169
+ <span>{entry.fulfillerStatus}</span>
170
+ </span>
171
+ </Tag>
172
+ </>
173
+ ),
174
+ },
175
+ orderer: { content: <span>{entry.orderer.display}</span> },
176
+ orderType: { content: <span>{entry.orderType.display}</span> },
177
+ urgency: { content: <span>{entry.urgency}</span> },
178
+ actions: {
179
+ content: (
180
+ <>
181
+ <ResultsOrder
182
+ patientUuid={entry.patient.uuid}
183
+ order={paginatedWorkListEntries[index]}
184
+ />
185
+ <RejectOrder order={paginatedWorkListEntries[index]} />
186
+ </>
187
+ ),
188
+ },
189
+ }));
190
+ }, [ResultsOrder, paginatedWorkListEntries]);
191
+
192
+ if (isLoading) {
193
+ return <DataTableSkeleton role="progressbar" />;
194
+ }
195
+
196
+ if (paginatedWorkListEntries?.length >= 0) {
197
+ return (
198
+ <div>
199
+ <div className={styles.headerBtnContainer}></div>
200
+ <DataTable rows={tableRows} headers={columns} useZebraStyles>
201
+ {({
202
+ rows,
203
+ headers,
204
+ getHeaderProps,
205
+ getTableProps,
206
+ getRowProps,
207
+ onInputChange,
208
+ }) => (
209
+ <TableContainer className={styles.tableContainer}>
210
+ <TableToolbar
211
+ style={{
212
+ position: "static",
213
+ height: "3rem",
214
+ overflow: "visible",
215
+ backgroundColor: "color",
216
+ }}
217
+ >
218
+ <TableToolbarContent>
219
+ <Layer style={{ margin: "5px" }}>
220
+ <DatePicker dateFormat="Y-m-d" datePickerType="single">
221
+ <DatePickerInput
222
+ labelText={""}
223
+ id="activatedOnOrAfterDate"
224
+ placeholder="YYYY-MM-DD"
225
+ onChange={(event) => {
226
+ setActivatedOnOrAfterDate(event.target.value);
227
+ }}
228
+ type="date"
229
+ value={activatedOnOrAfterDate}
230
+ />
231
+ </DatePicker>
232
+ </Layer>
233
+ <Layer>
234
+ <TableToolbarSearch
235
+ onChange={onInputChange}
236
+ placeholder={t("searchThisList", "Search this list")}
237
+ size="sm"
238
+ />
239
+ </Layer>
240
+ </TableToolbarContent>
241
+ </TableToolbar>
242
+ <Table
243
+ {...getTableProps()}
244
+ className={styles.activePatientsTable}
245
+ >
246
+ <TableHead>
247
+ <TableRow>
248
+ {headers.map((header) => (
249
+ <TableHeader {...getHeaderProps({ header })}>
250
+ {header.header?.content ?? header.header}
251
+ </TableHeader>
252
+ ))}
253
+ </TableRow>
254
+ </TableHead>
255
+ <TableBody>
256
+ {rows.map((row, index) => {
257
+ return (
258
+ <React.Fragment key={row.id}>
259
+ <TableRow {...getRowProps({ row })} key={row.id}>
260
+ {row.cells.map((cell) => (
261
+ <TableCell key={cell.id}>
262
+ {cell.value?.content ?? cell.value}
263
+ </TableCell>
264
+ ))}
265
+ </TableRow>
266
+ </React.Fragment>
267
+ );
268
+ })}
269
+ </TableBody>
270
+ </Table>
271
+ {rows.length === 0 ? (
272
+ <div className={styles.tileContainer}>
273
+ <Tile className={styles.tile}>
274
+ <div className={styles.tileContent}>
275
+ <p className={styles.content}>
276
+ {t(
277
+ "noWorklistsToDisplay",
278
+ "No worklists orders to display"
279
+ )}
280
+ </p>
281
+ </div>
282
+ </Tile>
283
+ </div>
284
+ ) : null}
285
+ <Pagination
286
+ forwardText="Next page"
287
+ backwardText="Previous page"
288
+ page={currentPage}
289
+ pageSize={currentPageSize}
290
+ pageSizes={pageSizes}
291
+ totalItems={workListEntries?.length}
292
+ className={styles.pagination}
293
+ onChange={({ pageSize, page }) => {
294
+ if (pageSize !== currentPageSize) {
295
+ setPageSize(pageSize);
296
+ }
297
+ if (page !== currentPage) {
298
+ goTo(page);
299
+ }
300
+ }}
301
+ />
302
+ </TableContainer>
303
+ )}
304
+ </DataTable>
305
+ </div>
306
+ );
307
+ }
308
+ };
309
+
310
+ export default WorkList;
@@ -0,0 +1,136 @@
1
+ import { openmrsFetch } from "@openmrs/esm-framework";
2
+ import useSWR from "swr";
3
+
4
+ export interface Result {
5
+ uuid: string;
6
+ orderNumber: string;
7
+ accessionNumber: string;
8
+ patient: Patient;
9
+ concept: Concept;
10
+ action: string;
11
+ careSetting: CareSetting;
12
+ previousOrder: PreviousOrder;
13
+ dateActivated: string;
14
+ scheduledDate: any;
15
+ dateStopped: any;
16
+ autoExpireDate: any;
17
+ encounter: Encounter;
18
+ orderer: Orderer;
19
+ orderReason: any;
20
+ orderReasonNonCoded: any;
21
+ orderType: OrderType;
22
+ urgency: string;
23
+ instructions: any;
24
+ commentToFulfiller: any;
25
+ display: string;
26
+ auditInfo: AuditInfo;
27
+ fulfillerStatus: string;
28
+ fulfillerComment: any;
29
+ specimenSource: SpecimenSource;
30
+ laterality: any;
31
+ clinicalHistory: any;
32
+ frequency: any;
33
+ numberOfRepeats: any;
34
+ links: Link[];
35
+ type: string;
36
+ resourceVersion: string;
37
+ }
38
+
39
+ export interface Patient {
40
+ uuid: string;
41
+ display: string;
42
+ links: Link[];
43
+ }
44
+
45
+ export interface Link {
46
+ rel: string;
47
+ uri: string;
48
+ resourceAlias: string;
49
+ }
50
+
51
+ export interface Concept {
52
+ uuid: string;
53
+ display: string;
54
+ links: Link[];
55
+ }
56
+
57
+ export interface CareSetting {
58
+ uuid: string;
59
+ name: string;
60
+ description: string;
61
+ retired: boolean;
62
+ careSettingType: string;
63
+ display: string;
64
+ links: Link[];
65
+ resourceVersion: string;
66
+ }
67
+
68
+ export interface PreviousOrder {
69
+ uuid: string;
70
+ display: string;
71
+ links: Link[];
72
+ type: string;
73
+ }
74
+
75
+ export interface Encounter {
76
+ uuid: string;
77
+ display: string;
78
+ links: Link[];
79
+ }
80
+
81
+ export interface Orderer {
82
+ uuid: string;
83
+ display: string;
84
+ links: Link[];
85
+ }
86
+
87
+ export interface OrderType {
88
+ uuid: string;
89
+ display: string;
90
+ name: string;
91
+ javaClassName: string;
92
+ retired: boolean;
93
+ description: string;
94
+ conceptClasses: any[];
95
+ parent: any;
96
+ links: Link[];
97
+ resourceVersion: string;
98
+ }
99
+
100
+ export interface AuditInfo {
101
+ creator: Creator;
102
+ dateCreated: string;
103
+ changedBy: any;
104
+ dateChanged: any;
105
+ }
106
+
107
+ export interface Creator {
108
+ uuid: string;
109
+ display: string;
110
+ links: Link[];
111
+ }
112
+
113
+ export interface SpecimenSource {
114
+ uuid: string;
115
+ display: string;
116
+ links: Link[];
117
+ }
118
+
119
+ export function useGetOrdersWorklist(
120
+ activatedOnOrAfterDate: string,
121
+ fulfillerStatus: string
122
+ ) {
123
+ const apiUrl = `/ws/rest/v1/order?orderTypes=52a447d3-a64a-11e3-9aeb-50e549534c5e&activatedOnOrAfterDate=${activatedOnOrAfterDate}&isStopped=false&fulfillerStatus=${fulfillerStatus}&v=full
124
+ `;
125
+
126
+ const { data, error, isLoading } = useSWR<
127
+ { data: { results: Array<Result> } },
128
+ Error
129
+ >(apiUrl, openmrsFetch);
130
+
131
+ return {
132
+ workListEntries: data?.data ? data.data.results : [],
133
+ isLoading,
134
+ isError: error,
135
+ };
136
+ }
@@ -0,0 +1,215 @@
1
+ @use '@carbon/styles/scss/spacing';
2
+ @use '@carbon/styles/scss/type';
3
+ @import "~@openmrs/esm-styleguide/src/vars";
4
+ @import '../root.scss';
5
+
6
+ title {
7
+ width: 6.938rem;
8
+ height: 1.75rem;
9
+ margin: 0.438rem 22.875rem 0.813rem 0;
10
+ font-family: IBMPlexSans;
11
+ font-size: 1.25rem;
12
+ font-weight: normal;
13
+ font-stretch: normal;
14
+ font-style: normal;
15
+ line-height: 1.4;
16
+ letter-spacing: normal;
17
+ }
18
+
19
+ .link {
20
+ text-decoration: none;
21
+ }
22
+
23
+ .breadcrumbsSlot {
24
+ grid-row: 1 / 2;
25
+ grid-column: 1 / 2;
26
+ }
27
+
28
+ .orderTabsContainer {
29
+ height: 100%;
30
+ width: 100%;
31
+
32
+ :global(.cds--tab-content) {
33
+ padding: 0 !important;
34
+ }
35
+ }
36
+
37
+ .orderTabs {
38
+ grid-column: 'span 2';
39
+ padding: 0 spacing.$spacing-05;
40
+ }
41
+
42
+ .newListButton {
43
+ width: fit-content;
44
+ justify-self: end;
45
+ align-self: center;
46
+ }
47
+
48
+ .tabsContainer {
49
+ background-color: $ui-02;
50
+
51
+ :global(.cds--tabs__nav-item--selected) {
52
+ box-shadow: inset 0 2px 0 0 var(--brand-03) !important;
53
+ }
54
+
55
+ :global(.cds--tab--list) button {
56
+ max-width: 12rem !important;
57
+ }
58
+ }
59
+
60
+ .hiddenTabsContent,
61
+ .tabs .hiddenTabsContent {
62
+ display: none;
63
+ }
64
+
65
+ .patientListTableContainer {
66
+ grid-row: 3 / 4;
67
+ grid-column: 1 / 2;
68
+ height: 100%;
69
+ margin: 0.5rem spacing.$spacing-05;
70
+ background-color: $ui-01;
71
+ border: 0.5px solid #e0e0e0;
72
+
73
+ :global(.cds--data-table-container) {
74
+ padding-top: 0 !important;
75
+ }
76
+
77
+ tbody>tr>:nth-child(2) {
78
+ white-space: nowrap;
79
+ }
80
+
81
+ :global(.cds--data-table td) {
82
+ height: unset !important;
83
+ }
84
+
85
+ :global(.cds--data-table--zebra) tbody tr[data-parent-row]:nth-child(4n + 1) td {
86
+ background-color: $ui-02;
87
+ border-bottom: 1px solid $ui-03;
88
+ border-top: 1px solid $ui-03;
89
+ }
90
+
91
+ :global(.cds--data-table--zebra) tbody tr[data-parent-row]:nth-child(4n + 3) td {
92
+ background-color: $ui-01;
93
+ border-bottom: 1px solid $ui-03;
94
+ }
95
+ }
96
+
97
+ .tableContainer {
98
+ background-color: $ui-01;
99
+ margin: 0 spacing.$spacing-05;
100
+ padding: 0;
101
+
102
+ a {
103
+ text-decoration: none;
104
+ }
105
+
106
+ th {
107
+ color: $text-02;
108
+ }
109
+
110
+ :global(.cds--data-table) {
111
+ background-color: $ui-03;
112
+ }
113
+
114
+ .toolbarContent {
115
+ height: spacing.$spacing-07;
116
+ margin-bottom: spacing.$spacing-02;
117
+ }
118
+ }
119
+
120
+ .activePatientsTable tr:last-of-type {
121
+ td {
122
+ border-bottom: none;
123
+ }
124
+ }
125
+
126
+ .headerBtnContainer {
127
+ background-color: $ui-background;
128
+ padding: spacing.$spacing-05;
129
+ text-align: right;
130
+ }
131
+
132
+ .searchContainer {
133
+ display: flex;
134
+ align-items: center;
135
+ flex-direction: row-reverse;
136
+ padding-top: 0.5rem;
137
+
138
+ :global(.cds--search-magnifier-icon) {
139
+ z-index: 0 !important;
140
+ }
141
+
142
+ input {
143
+ background-color: #fff;
144
+ }
145
+ }
146
+
147
+ .addOrderBtn {
148
+ width: 10rem !important;
149
+ padding: 0.5rem !important;
150
+ margin-left: 1rem;
151
+ margin-right: 1rem;
152
+ }
153
+
154
+ .patientSearch {
155
+ width: 25rem;
156
+ border-bottom-color: $ui-03;
157
+ }
158
+
159
+ .locationFilter {
160
+ width: 25rem;
161
+ }
162
+
163
+ .search {
164
+ width: 100%;
165
+ max-width: 16rem;
166
+ background-color: $ui-02;
167
+ border-bottom-color: $ui-03;
168
+ }
169
+
170
+ .container {
171
+ background-color: $ui-01;
172
+ }
173
+
174
+ .expandedLabQueueVisitRow {
175
+ :global(.cds--tab-content) {
176
+ padding: 0.5rem 0;
177
+ }
178
+
179
+ td {
180
+ padding: 0.5rem;
181
+
182
+ >div {
183
+ max-height: max-content !important;
184
+ background-color: $ui-02;
185
+ }
186
+ }
187
+
188
+ th[colspan] td[colspan]>div:first-child {
189
+ padding: 0 1rem;
190
+ }
191
+ }
192
+
193
+
194
+ .tileContainer {
195
+ background-color: $ui-02;
196
+ border-top: 1px solid $ui-03;
197
+ padding: 5rem 0;
198
+ }
199
+
200
+ .tile {
201
+ margin: auto;
202
+ width: fit-content;
203
+ }
204
+
205
+ .tileContent {
206
+ display: flex;
207
+ flex-direction: column;
208
+ align-items: center;
209
+ }
210
+
211
+ .content {
212
+ @include type.type-style('heading-compact-02');
213
+ color: $text-02;
214
+ margin-bottom: 0.5rem;
215
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "age": "Age",
3
+ "completed": "Completed",
4
+ "inProgress": "In progress",
5
+ "laboratory": "Laboratory",
6
+ "loading": "Loading",
7
+ "names": "Names",
8
+ "orderedFrom": "Ordered from",
9
+ "referredTests": "Referred tests",
10
+ "results": "Results",
11
+ "testsOrdered": "Tests ordered",
12
+ "transferred": "Transferred",
13
+ "visitId": "Visit ID",
14
+ "waitingTime": "Waiting time",
15
+ "worklist": "Worklist"
16
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "loading": "Cargando"
3
+ }
@@ -0,0 +1,3 @@
1
+ {
2
+ "loading": "Chargement"
3
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "compilerOptions": {
3
+ "esModuleInterop": true,
4
+ "module": "esnext",
5
+ "allowSyntheticDefaultImports": true,
6
+ "jsx": "react",
7
+ "skipLibCheck": true,
8
+ "moduleResolution": "node",
9
+ "lib": [
10
+ "dom",
11
+ "es5",
12
+ "scripthost",
13
+ "es2015",
14
+ "es2015.promise",
15
+ "es2016.array.include",
16
+ "es2018",
17
+ "es2020"
18
+ ],
19
+ "resolveJsonModule": true,
20
+ "noEmit": true,
21
+ "target": "esnext"
22
+ }
23
+ }