@kenyaemr/esm-bed-management-app 1.0.1-pre.7 → 8.0.2

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 (176) hide show
  1. package/.turbo/turbo-build.log +36 -0
  2. package/README.md +6 -38
  3. package/dist/130.js +2 -0
  4. package/dist/{800.js.LICENSE.txt → 130.js.LICENSE.txt} +2 -0
  5. package/dist/130.js.map +1 -0
  6. package/dist/148.js +1 -0
  7. package/dist/148.js.map +1 -0
  8. package/dist/169.js +1 -0
  9. package/dist/169.js.map +1 -0
  10. package/dist/271.js +1 -0
  11. package/dist/319.js +1 -0
  12. package/dist/325.js +1 -0
  13. package/dist/325.js.map +1 -0
  14. package/dist/339.js +1 -0
  15. package/dist/339.js.map +1 -0
  16. package/dist/455.js +1 -1
  17. package/dist/455.js.LICENSE.txt +6 -0
  18. package/dist/455.js.map +1 -1
  19. package/dist/460.js +1 -0
  20. package/dist/501.js +1 -0
  21. package/dist/501.js.map +1 -0
  22. package/dist/542.js +1 -0
  23. package/dist/542.js.map +1 -0
  24. package/dist/574.js +1 -1
  25. package/dist/591.js +2 -0
  26. package/dist/{26.js.LICENSE.txt → 591.js.LICENSE.txt} +3 -3
  27. package/dist/591.js.map +1 -0
  28. package/dist/644.js +1 -0
  29. package/dist/757.js +1 -0
  30. package/dist/766.js +2 -0
  31. package/dist/{330.js.LICENSE.txt → 766.js.LICENSE.txt} +0 -9
  32. package/dist/766.js.map +1 -0
  33. package/dist/{294.js → 784.js} +2 -2
  34. package/dist/{294.js.map → 784.js.map} +1 -1
  35. package/dist/788.js +1 -0
  36. package/dist/807.js +1 -0
  37. package/dist/833.js +1 -0
  38. package/dist/main.js +1 -1
  39. package/dist/main.js.map +1 -1
  40. package/dist/openmrs-esm-bed-management-app.js +1 -0
  41. package/dist/{esm-kenyaemr-bed-management-app.js.buildmanifest.json → openmrs-esm-bed-management-app.js.buildmanifest.json} +202 -155
  42. package/dist/openmrs-esm-bed-management-app.js.map +1 -0
  43. package/dist/routes.json +1 -1
  44. package/jest.config.js +3 -0
  45. package/package-lock.json +5893 -0
  46. package/package.json +25 -83
  47. package/src/__mocks__/react-i18next.js +18 -14
  48. package/src/admin-card-link.component.tsx +7 -10
  49. package/src/bed-administration/bed-administration-form.component.tsx +65 -99
  50. package/src/bed-administration/bed-administration-table.component.tsx +68 -127
  51. package/src/bed-administration/bed-administration-table.scss +12 -16
  52. package/src/bed-administration/bed-administration.resource.ts +16 -18
  53. package/src/bed-administration/edit-bed-form.component.tsx +20 -31
  54. package/src/bed-administration/new-bed-form.component.tsx +28 -44
  55. package/src/{bed-admission/bed-tag → bed-tag}/bed-tag-administration-table.component.tsx +35 -60
  56. package/src/{bed-admission/bed-tag → bed-tag}/bed-tags-admin-form.component.tsx +30 -34
  57. package/src/{bed-admission/bed-tag → bed-tag}/edit-tag-form.component.tsx +17 -25
  58. package/src/{bed-admission/bed-tag → bed-tag}/new-tag-form.component.tsx +20 -27
  59. package/src/{bed-admission/bed-type → bed-type}/bed-type-admin-form.component.tsx +37 -44
  60. package/src/{bed-admission/bed-type → bed-type}/bed-type-administration-table.component.tsx +36 -60
  61. package/src/{bed-admission/bed-type → bed-type}/edit-bed-type.component.tsx +17 -25
  62. package/src/{bed-admission/bed-type → bed-type}/new-bed-type-form.component.tsx +21 -28
  63. package/src/card-header/card-header.component.tsx +20 -0
  64. package/src/card-header/card-header.scss +45 -0
  65. package/src/config-schema.ts +9 -17
  66. package/src/declarations.d.ts +5 -5
  67. package/src/empty-state/empty-state.component.tsx +6 -21
  68. package/src/empty-state/empty-state.scss +10 -10
  69. package/src/header/header.component.tsx +14 -23
  70. package/src/header/header.scss +11 -11
  71. package/src/header/illustration.component.tsx +3 -3
  72. package/src/home.component.tsx +4 -4
  73. package/src/index.ts +21 -48
  74. package/src/left-panel/left-panel.component.tsx +7 -17
  75. package/src/left-panel/left-panel.scss +8 -7
  76. package/src/left-panel-link.component.tsx +14 -24
  77. package/src/root.component.tsx +12 -12
  78. package/src/root.scss +2 -2
  79. package/src/routes.json +12 -12
  80. package/src/setup-tests.ts +1 -1
  81. package/src/summary/summary.component.tsx +16 -30
  82. package/src/summary/summary.resource.ts +116 -95
  83. package/src/summary/summary.scss +31 -29
  84. package/src/types.ts +50 -40
  85. package/src/ward-card/ward-card.component.tsx +5 -12
  86. package/src/ward-card/ward-card.scss +2 -2
  87. package/src/ward-with-beds/ward-with-beds.component.tsx +28 -47
  88. package/src/ward-with-beds/ward-with-beds.scss +5 -5
  89. package/translations/am.json +51 -0
  90. package/translations/ar.json +51 -0
  91. package/translations/en.json +48 -4
  92. package/translations/es.json +51 -0
  93. package/translations/fr.json +51 -0
  94. package/translations/he.json +51 -0
  95. package/translations/km.json +51 -0
  96. package/translations/zh.json +51 -0
  97. package/translations/zh_CN.json +51 -0
  98. package/tsconfig.json +3 -21
  99. package/webpack.config.js +1 -1
  100. package/.editorconfig +0 -12
  101. package/.eslintignore +0 -2
  102. package/.eslintrc +0 -37
  103. package/.husky/pre-commit +0 -4
  104. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  105. package/.idea/modules.xml +0 -8
  106. package/.idea/vcs.xml +0 -6
  107. package/.prettierignore +0 -14
  108. package/.turbo.json +0 -18
  109. package/.yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs +0 -541
  110. package/.yarn/plugins/@yarnpkg/plugin-version.cjs +0 -550
  111. package/.yarn/versions/cb9a89ac.yml +0 -0
  112. package/LICENSE +0 -373
  113. package/dist/187.js +0 -1
  114. package/dist/187.js.map +0 -1
  115. package/dist/207.js +0 -1
  116. package/dist/207.js.map +0 -1
  117. package/dist/26.js +0 -2
  118. package/dist/26.js.map +0 -1
  119. package/dist/283.js +0 -1
  120. package/dist/283.js.map +0 -1
  121. package/dist/330.js +0 -2
  122. package/dist/330.js.map +0 -1
  123. package/dist/352.js +0 -1
  124. package/dist/352.js.map +0 -1
  125. package/dist/404.js +0 -1
  126. package/dist/404.js.map +0 -1
  127. package/dist/558.js +0 -2
  128. package/dist/558.js.LICENSE.txt +0 -14
  129. package/dist/558.js.map +0 -1
  130. package/dist/629.js +0 -1
  131. package/dist/629.js.map +0 -1
  132. package/dist/707.js +0 -1
  133. package/dist/707.js.map +0 -1
  134. package/dist/800.js +0 -2
  135. package/dist/800.js.map +0 -1
  136. package/dist/850.js +0 -1
  137. package/dist/850.js.map +0 -1
  138. package/dist/884.js +0 -1
  139. package/dist/884.js.map +0 -1
  140. package/dist/933.js +0 -1
  141. package/dist/933.js.map +0 -1
  142. package/dist/esm-kenyaemr-bed-management-app.js +0 -1
  143. package/dist/esm-kenyaemr-bed-management-app.js.map +0 -1
  144. package/i18next-parser.config.js +0 -89
  145. package/src/assets/landing-page.png +0 -0
  146. package/src/assets/logo.svg +0 -1
  147. package/src/bed-admission/active-patients/active-patients-table.component.tsx +0 -299
  148. package/src/bed-admission/active-patients/active-visits.resource.ts +0 -171
  149. package/src/bed-admission/active-patients/admission-action-button-styles.scss +0 -0
  150. package/src/bed-admission/active-patients/admission-action-button.component.tsx +0 -26
  151. package/src/bed-admission/active-patients/index.tsx +0 -15
  152. package/src/bed-admission/active-patients/patient-queues.resource.ts +0 -136
  153. package/src/bed-admission/active-patients/styles.scss +0 -284
  154. package/src/bed-admission/active-patients/view-action-menu.component.tsx +0 -33
  155. package/src/bed-admission/admitted-patients/active-admissions.resource.ts +0 -121
  156. package/src/bed-admission/admitted-patients/admitted-patients-table.component.tsx +0 -280
  157. package/src/bed-admission/admitted-patients/admitted-patients.component.tsx +0 -22
  158. package/src/bed-admission/admitted-patients/location-combo-box.component.tsx +0 -55
  159. package/src/bed-admission/admitted-patients/styles.scss +0 -284
  160. package/src/bed-admission/bed-admission-tabs-styles.scss +0 -30
  161. package/src/bed-admission/bed-admission-tabs.component.tsx +0 -69
  162. package/src/bed-admission/bed-admission.component.tsx +0 -15
  163. package/src/bed-admission/bed-admission.resource.ts +0 -35
  164. package/src/bed-admission/bed-layout/bed-layout-list.component.tsx +0 -101
  165. package/src/bed-admission/bed-layout/bed-layout.component.tsx +0 -64
  166. package/src/bed-admission/bed-layout/bed-layout.scss +0 -118
  167. package/src/bed-admission/bed-layout/min-bed-layout.component.tsx +0 -26
  168. package/src/bed-admission/createDashboardLink.tsx +0 -47
  169. package/src/bed-admission/discharged-patients/discharged-patients.componet.tsx +0 -19
  170. package/src/bed-admission/helpers/functions.ts +0 -102
  171. package/src/bed-admission/types.ts +0 -133
  172. package/src/workspace/allocate-bed-workspace.component.tsx +0 -141
  173. package/src/workspace/allocate-bed.scss +0 -117
  174. package/src/workspace/overlay.component.tsx +0 -55
  175. package/src/workspace/overlay.scss +0 -96
  176. /package/dist/{294.js.LICENSE.txt → 784.js.LICENSE.txt} +0 -0
@@ -1,136 +0,0 @@
1
- import dayjs from "dayjs";
2
- import useSWR from "swr";
3
-
4
- import { formatDate, openmrsFetch, parseDate } from "@openmrs/esm-framework";
5
- import { PatientQueue, UuidDisplay } from "../types";
6
-
7
- export interface MappedPatientQueueEntry {
8
- id: string;
9
- name: string;
10
- patientAge: number;
11
- patientSex: string;
12
- patientDob: string;
13
- patientUuid: string;
14
- priority: string;
15
- priorityComment: string;
16
- status: string;
17
- waitTime: string;
18
- locationFrom?: string;
19
- locationToName?: string;
20
- visitNumber: string;
21
- identifiers: Array<UuidDisplay>;
22
- dateCreated: string;
23
- creatorUuid: string;
24
- creatorUsername: string;
25
- creatorDisplay: string;
26
- }
27
-
28
- export function usePatientQueuesList(
29
- currentQueueRoomLocationUuid: string,
30
- status: string
31
- ) {
32
- const apiUrl = `/ws/rest/v1/patientqueue?v=full&room=${currentQueueRoomLocationUuid}&status=${status}`;
33
- return usePatientQueueRequest(apiUrl);
34
- }
35
-
36
- export function usePatientQueueRequest(apiUrl: string) {
37
- const { data, error, isLoading, isValidating, mutate } = useSWR<
38
- { data: { results: Array<PatientQueue> } },
39
- Error
40
- >(apiUrl, openmrsFetch, { refreshInterval: 3000 });
41
-
42
- const mapppedQueues = data?.data?.results.map((queue: PatientQueue) => {
43
- return {
44
- ...queue,
45
- id: queue.uuid,
46
- name: queue.patient?.person.display,
47
- patientUuid: queue.patient?.uuid,
48
- priorityComment: queue.priorityComment,
49
- priority:
50
- queue.priorityComment === "Urgent" ? "Priority" : queue.priorityComment,
51
- priorityLevel: queue.priority,
52
- waitTime: queue.dateCreated
53
- ? `${dayjs().diff(dayjs(queue.dateCreated), "minutes")}`
54
- : "--",
55
- status: queue.status,
56
- patientAge: queue.patient?.person?.age,
57
- patientSex: queue.patient?.person?.gender === "M" ? "MALE" : "FEMALE",
58
- patientDob: queue.patient?.person?.birthdate
59
- ? formatDate(parseDate(queue.patient.person.birthdate), { time: false })
60
- : "--",
61
- identifiers: queue.patient?.identifiers,
62
- locationFrom: queue.locationFrom?.uuid,
63
- locationTo: queue.locationTo?.uuid,
64
- locationFromName: queue.locationFrom?.name,
65
- locationToName: queue.locationTo?.name,
66
- queueRoom: queue.locationTo?.display,
67
- visitNumber: queue.visitNumber,
68
- dateCreated: queue.dateCreated
69
- ? formatDate(parseDate(queue.dateCreated), { time: false })
70
- : "--",
71
- creatorUuid: queue.creator?.uuid,
72
- creatorUsername: queue.creator?.username,
73
- creatorDisplay: queue.creator?.display,
74
- };
75
- });
76
-
77
- return {
78
- patientQueueEntries: mapppedQueues || [],
79
- patientQueueCount: mapppedQueues?.length,
80
- isLoading,
81
- isError: error,
82
- isValidating,
83
- mutate,
84
- };
85
- }
86
-
87
- export function usePatientActiveListRequest(apiUrl: string) {
88
- const { data, error, isLoading, isValidating, mutate } = useSWR<
89
- { data: { results: Array<PatientQueue> } },
90
- Error
91
- >(apiUrl, openmrsFetch, { refreshInterval: 3000 });
92
-
93
- const mapppedQueues = data?.data?.results.map((queue: PatientQueue) => {
94
- return {
95
- ...queue,
96
- id: queue.uuid,
97
- name: queue.patient?.person.display,
98
- patientUuid: queue.patient?.uuid,
99
- priorityComment: queue.priorityComment,
100
- priority:
101
- queue.priorityComment === "Urgent" ? "Priority" : queue.priorityComment,
102
- priorityLevel: queue.priority,
103
- waitTime: queue.dateCreated
104
- ? `${dayjs().diff(dayjs(queue.dateCreated), "minutes")}`
105
- : "--",
106
- status: queue.status,
107
- patientAge: queue.patient?.person?.age,
108
- patientSex: queue.patient?.person?.gender === "M" ? "MALE" : "FEMALE",
109
- patientDob: queue.patient?.person?.birthdate
110
- ? formatDate(parseDate(queue.patient.person.birthdate), { time: false })
111
- : "--",
112
- identifiers: queue.patient?.identifiers,
113
- locationFrom: queue.locationFrom?.uuid,
114
- locationTo: queue.locationTo?.uuid,
115
- locationFromName: queue.locationFrom?.name,
116
- locationToName: queue.locationTo?.name,
117
- queueRoom: queue.locationTo?.display,
118
- visitNumber: queue.visitNumber,
119
- dateCreated: queue.dateCreated
120
- ? formatDate(parseDate(queue.dateCreated), { time: false })
121
- : "--",
122
- creatorUuid: queue.creator?.uuid,
123
- creatorUsername: queue.creator?.username,
124
- creatorDisplay: queue.creator?.display,
125
- };
126
- });
127
-
128
- return {
129
- patientQueueEntries: mapppedQueues || [],
130
- patientQueueCount: mapppedQueues?.length,
131
- isLoading,
132
- isError: error,
133
- isValidating,
134
- mutate,
135
- };
136
- }
@@ -1,284 +0,0 @@
1
- @use '@carbon/type';
2
- @use '@carbon/colors';
3
- @use '@carbon/styles/scss/spacing';
4
- @import '~@openmrs/esm-styleguide/src/vars';
5
-
6
- .container {
7
- background-color: $ui-01;
8
- }
9
-
10
- .displayFlex {
11
- display: flex;
12
- }
13
-
14
- .section {
15
- border-right: 1px solid colors.$gray-20;
16
- }
17
-
18
- .activePatientsTable tr:last-of-type {
19
- td {
20
- border-bottom: none;
21
- }
22
- }
23
-
24
- .headerContainer {
25
- display: flex;
26
- justify-content: space-between;
27
- align-items: center;
28
- background-color: $ui-background;
29
- }
30
-
31
- .headerButtons {
32
- display: flex;
33
- flex-flow: column;
34
- }
35
-
36
- .heading {
37
- font-size: 20px;
38
- font-weight: bold;
39
- }
40
-
41
- .filterContainer {
42
- :global(.cds--dropdown__wrapper--inline) {
43
- gap: 0;
44
- }
45
-
46
- :global(.cds--list-box__menu-icon) {
47
- height: 1rem;
48
- }
49
-
50
- :global(.cds--dropdown--inline) :global(.cds--list-box__field) {
51
- min-width: 12rem;
52
- }
53
- }
54
-
55
- .tooltip :global(.cds--tooltip__trigger.cds--tooltip__trigger--definition) {
56
- border-bottom: none;
57
- }
58
-
59
- .tag {
60
- margin: 0.25rem 0;
61
- }
62
-
63
- .priorityTag {
64
- @extend .tag;
65
- @include type.type-style('label-01');
66
- color: #943d00;
67
- background-color: #ffc9a3;
68
- }
69
-
70
- .backgroundDataFetchingIndicator {
71
- align-items: center;
72
- display: flex;
73
- flex: 1 1 0%;
74
- justify-content: center;
75
- }
76
-
77
- .search {
78
- max-width: 16rem;
79
-
80
- input {
81
- background-color: $ui-02 !important;
82
- }
83
- }
84
-
85
- .tableContainer {
86
- background-color: $ui-01;
87
- margin: 0 spacing.$spacing-05;
88
- padding: 0;
89
-
90
- a {
91
- text-decoration: none;
92
- }
93
-
94
- th {
95
- color: $text-02;
96
- }
97
-
98
- :global(.cds--data-table) {
99
- background-color: $ui-03;
100
- }
101
-
102
- :global(.cds--data-table-content) {
103
- display: contents;
104
- }
105
-
106
- .toolbarContent {
107
- height: spacing.$spacing-07;
108
- margin-bottom: spacing.$spacing-02;
109
- }
110
- }
111
-
112
- .emptyRow {
113
- padding: 0 1rem;
114
- display: flex;
115
- align-items: center;
116
- }
117
-
118
- .activeVisitsTable tr:last-of-type {
119
- td {
120
- border-bottom: none;
121
- }
122
- }
123
-
124
- .expandedActiveVisitRow {
125
- :global(.cds--tab-content) {
126
- padding: 0.5rem 0;
127
- }
128
-
129
- td {
130
- padding: 0.5rem;
131
-
132
- >div {
133
- max-height: max-content !important;
134
- background-color: $ui-02;
135
- }
136
- }
137
-
138
- th[colspan] td[colspan]>div:first-child {
139
- padding: 0 1rem;
140
- }
141
- }
142
-
143
- .hiddenRow {
144
- display: none;
145
- }
146
-
147
- .content {
148
- @include type.type-style('heading-compact-02');
149
- color: $text-02;
150
- margin-bottom: 0.5rem;
151
- }
152
-
153
- .helper {
154
- @include type.type-style('body-compact-01');
155
- color: $text-02;
156
- }
157
-
158
- .separator {
159
- @include type.type-style('body-compact-02');
160
- color: $text-02;
161
- width: 80%;
162
- margin: 1.5rem auto;
163
- overflow: hidden;
164
- text-align: center;
165
-
166
- &::before,
167
- &::after {
168
- background-color: $text-03;
169
- content: '';
170
- display: inline-block;
171
- height: 1px;
172
- position: relative;
173
- vertical-align: middle;
174
- width: 50%;
175
- }
176
-
177
- &::before {
178
- right: 0.5rem;
179
- margin-left: -50%;
180
- }
181
-
182
- &::after {
183
- left: 0.5rem;
184
- margin-right: -50%;
185
- }
186
- }
187
-
188
- .tileContainer {
189
- background-color: $ui-02;
190
- border-top: 1px solid $ui-03;
191
- padding: 5rem 0;
192
- }
193
-
194
- .tile {
195
- margin: auto;
196
- width: fit-content;
197
- }
198
-
199
- .tileContent {
200
- display: flex;
201
- flex-direction: column;
202
- align-items: center;
203
- }
204
-
205
- .menuItem {
206
- max-width: none;
207
- }
208
-
209
- .desktopHeading {
210
- h4 {
211
- @include type.type-style('heading-compact-02');
212
- color: $text-02;
213
- }
214
- }
215
-
216
- .tabletHeading {
217
- h4 {
218
- @include type.type-style('heading-03');
219
- color: $text-02;
220
- }
221
- }
222
-
223
- .desktopHeading,
224
- .tabletHeading {
225
- text-align: left;
226
- text-transform: capitalize;
227
- margin-bottom: spacing.$spacing-05;
228
-
229
- h4:after {
230
- content: '';
231
- display: block;
232
- width: 2rem;
233
- padding-top: 3px;
234
- border-bottom: 0.375rem solid var(--brand-03);
235
- }
236
- }
237
-
238
- .statusContainer {
239
- display: flex;
240
- align-items: center;
241
-
242
- svg {
243
- margin-right: 0.5rem;
244
- }
245
- }
246
-
247
- .visitType {
248
- @include type.type-style('heading-compact-02');
249
- }
250
-
251
- .headerBtnContainer {
252
- background-color: $ui-background;
253
- text-align: right;
254
- }
255
-
256
- .addPatientToListBtn {
257
- margin-left: spacing.$spacing-05;
258
- height: spacing.$spacing-09;
259
- }
260
-
261
- .editIcon {
262
- color: $interactive-01;
263
- margin-top: 0.5rem;
264
- cursor: pointer;
265
- }
266
-
267
- .expandedLabQueueVisitRow {
268
- :global(.cds--tab-content) {
269
- padding: 0.5rem 0;
270
- }
271
-
272
- td {
273
- padding: 0.5rem;
274
-
275
- >div {
276
- max-height: max-content !important;
277
- background-color: $ui-02;
278
- }
279
- }
280
-
281
- th[colspan] td[colspan]>div:first-child {
282
- padding: 0 1rem;
283
- }
284
- }
@@ -1,33 +0,0 @@
1
- import { Button, Tooltip } from "@carbon/react";
2
- import { Dashboard } from "@carbon/react/icons";
3
- import React, { AnchorHTMLAttributes } from "react";
4
- import { useTranslation } from "react-i18next";
5
- import { interpolateUrl, navigate } from "@openmrs/esm-framework";
6
-
7
- interface NameLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
8
- to: string;
9
- from: string;
10
- }
11
-
12
- const ViewActionsMenu: React.FC<NameLinkProps> = ({ from, to }) => {
13
- const { t } = useTranslation();
14
-
15
- const handleNameClick = (event: MouseEvent, to: string) => {
16
- event.preventDefault();
17
- navigate({ to });
18
- localStorage.setItem("fromPage", from);
19
- };
20
-
21
- return (
22
- <Tooltip align="bottom" label="View Patient">
23
- <Button
24
- kind="ghost"
25
- onClick={(e) => handleNameClick(e, to)}
26
- href={interpolateUrl(to)}
27
- iconDescription={t("viewPatient", "View Patient")}
28
- renderIcon={(props) => <Dashboard size={16} {...props} />}
29
- />
30
- </Tooltip>
31
- );
32
- };
33
- export default ViewActionsMenu;
@@ -1,121 +0,0 @@
1
- import { useEffect } from "react";
2
- import useSWRInfinite from "swr/infinite";
3
- import dayjs from "dayjs";
4
- import isToday from "dayjs/plugin/isToday";
5
- import last from "lodash-es/last";
6
- import {
7
- openmrsFetch,
8
- useSession,
9
- type FetchResponse,
10
- } from "@openmrs/esm-framework";
11
- import { AdmissionLocation } from "../../types";
12
-
13
- dayjs.extend(isToday);
14
-
15
- interface VisitResponse {
16
- results: Array<AdmissionLocation>;
17
- links: Array<{ rel: "prev" | "next" }>;
18
- totalCount: number;
19
- }
20
-
21
- export interface BedPatientAssignment {
22
- patientUuid: string;
23
- age: number;
24
- gender: string;
25
- patientName: string;
26
- ward: string;
27
- bedNumber: string;
28
- }
29
- export function useActiveAdmissions() {
30
- const session = useSession();
31
- const sessionLocation = session?.sessionLocation?.uuid;
32
-
33
- const getUrl = (
34
- pageIndex,
35
- previousPageData: FetchResponse<VisitResponse>
36
- ) => {
37
- if (
38
- pageIndex &&
39
- !previousPageData?.data?.links?.some((link) => link.rel === "next")
40
- ) {
41
- return null;
42
- }
43
-
44
- const url = `/ws/rest/v1/admissionLocation?v=full`;
45
- const urlSearchParams = new URLSearchParams();
46
-
47
- if (pageIndex) {
48
- urlSearchParams.append("startIndex", `${pageIndex * 50}`);
49
- }
50
-
51
- return url + urlSearchParams.toString();
52
- };
53
-
54
- const {
55
- data,
56
- error,
57
- isLoading,
58
- isValidating,
59
- size: pageNumber,
60
- setSize,
61
- mutate,
62
- } = useSWRInfinite<FetchResponse<VisitResponse>, Error>(
63
- sessionLocation ? getUrl : null,
64
- openmrsFetch
65
- );
66
-
67
- useEffect(() => {
68
- if (
69
- data &&
70
- data?.[pageNumber - 1]?.data?.links?.some((link) => link.rel === "next")
71
- ) {
72
- setSize((currentSize) => currentSize + 1);
73
- }
74
- }, [data, pageNumber]);
75
-
76
- const formattedActiveVisits: any = (data: FetchResponse<VisitResponse>) => {
77
- const result = data
78
- ? data[0].data?.results?.map((wardEntry) => {
79
- return wardEntry.bedLayouts;
80
- })
81
- : [];
82
-
83
- const allBeds = [];
84
-
85
- result?.forEach((elemnt) => {
86
- elemnt.forEach((b) => {
87
- allBeds.push(b);
88
- });
89
- });
90
- const finalFinalList = allBeds
91
- ?.filter((b) => b.status === "OCCUPIED")
92
- .map((bedEntry) => {
93
- const patient: BedPatientAssignment = {
94
- patientUuid: bedEntry.patient.uuid,
95
- age: bedEntry.patient.person.age,
96
- gender: bedEntry.patient.person.gender,
97
- patientName: bedEntry.patient.person.preferredName.givenName
98
- .concat(" ")
99
- .concat(bedEntry.patient.person.preferredName.familyName),
100
- ward: bedEntry.location,
101
- bedNumber: bedEntry.bedNumber,
102
- };
103
- return patient;
104
- });
105
- return finalFinalList;
106
- };
107
-
108
- return {
109
- patientQueueEntries: formattedActiveVisits(data),
110
- isError: error,
111
- isLoading,
112
- isValidating,
113
- patientQueueCount: data?.[0]?.data?.totalCount ?? 0,
114
- mutate,
115
- };
116
- }
117
-
118
- export const getOriginFromPathName = (pathname = "") => {
119
- const from = pathname.split("/");
120
- return last(from);
121
- };