@kenyaemr/esm-ward-app 7.0.3-pre.88 → 7.0.3-pre.94

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 (146) hide show
  1. package/.turbo/turbo-build.log +24 -16
  2. package/dist/130.js +1 -1
  3. package/dist/130.js.map +1 -1
  4. package/dist/169.js +1 -0
  5. package/dist/169.js.map +1 -0
  6. package/dist/269.js +1 -0
  7. package/dist/269.js.map +1 -0
  8. package/dist/346.js +1 -0
  9. package/dist/346.js.map +1 -0
  10. package/dist/348.js +1 -0
  11. package/dist/348.js.map +1 -0
  12. package/dist/466.js +1 -0
  13. package/dist/466.js.map +1 -0
  14. package/dist/501.js +1 -0
  15. package/dist/501.js.map +1 -0
  16. package/dist/574.js +1 -1
  17. package/dist/577.js +1 -0
  18. package/dist/577.js.map +1 -0
  19. package/dist/659.js +1 -0
  20. package/dist/659.js.map +1 -0
  21. package/dist/749.js +1 -0
  22. package/dist/749.js.map +1 -0
  23. package/dist/76.js +1 -0
  24. package/dist/76.js.map +1 -0
  25. package/dist/767.js +1 -0
  26. package/dist/767.js.map +1 -0
  27. package/dist/793.js +2 -0
  28. package/dist/793.js.map +1 -0
  29. package/dist/803.js +1 -0
  30. package/dist/803.js.map +1 -0
  31. package/dist/940.js +1 -0
  32. package/dist/940.js.map +1 -0
  33. package/dist/960.js +1 -0
  34. package/dist/960.js.map +1 -0
  35. package/dist/kenyaemr-esm-ward-app.js +1 -1
  36. package/dist/kenyaemr-esm-ward-app.js.buildmanifest.json +330 -42
  37. package/dist/kenyaemr-esm-ward-app.js.map +1 -1
  38. package/dist/main.js +1 -1
  39. package/dist/main.js.map +1 -1
  40. package/dist/routes.json +1 -1
  41. package/package.json +2 -2
  42. package/src/action-menu-buttons/transfer-workspace-siderail.component.tsx +27 -0
  43. package/src/beds/empty-bed.component.tsx +1 -1
  44. package/src/beds/empty-bed.scss +6 -6
  45. package/src/beds/occupied-bed.component.tsx +5 -5
  46. package/src/beds/occupied-bed.scss +2 -3
  47. package/src/beds/occupied-bed.test.tsx +37 -21
  48. package/src/beds/unassigned-patient.component.tsx +20 -0
  49. package/src/beds/unassigned-patient.scss +6 -0
  50. package/src/config-schema-admission-request-note.ts +9 -0
  51. package/src/config-schema-extension-colored-obs-tags.ts +91 -0
  52. package/src/config-schema.ts +165 -231
  53. package/src/createDashboardLink.component.tsx +42 -0
  54. package/src/hooks/useAdmissionLocation.ts +12 -7
  55. package/src/hooks/useCurrentWardCardConfig.ts +32 -0
  56. package/src/hooks/useEmrConfiguration.ts +112 -0
  57. package/src/hooks/useInpatientAdmission.ts +28 -0
  58. package/src/hooks/useInpatientRequest.ts +39 -9
  59. package/src/hooks/useLocation.test.ts +38 -0
  60. package/src/hooks/useLocation.ts +9 -0
  61. package/src/hooks/useLocations.ts +54 -0
  62. package/src/hooks/useMostRecentObs.ts +27 -0
  63. package/src/hooks/useRestPatient.ts +18 -0
  64. package/src/hooks/useWardLocation.test.ts +108 -0
  65. package/src/hooks/useWardLocation.ts +26 -0
  66. package/src/index.ts +71 -4
  67. package/src/location-selector/location-selector.component.tsx +118 -0
  68. package/src/location-selector/location-selector.scss +48 -0
  69. package/src/root.component.tsx +2 -1
  70. package/src/routes.json +79 -12
  71. package/src/types/index.ts +87 -46
  72. package/src/ward-patient-card/card-rows/admission-request-note.extension.tsx +27 -0
  73. package/src/ward-patient-card/card-rows/colored-obs-tags-card-row.extension.tsx +13 -0
  74. package/src/ward-patient-card/row-elements/ward-patient-age.tsx +7 -13
  75. package/src/ward-patient-card/row-elements/ward-patient-bed-number.tsx +2 -2
  76. package/src/ward-patient-card/row-elements/ward-patient-coded-obs-tags.tsx +51 -50
  77. package/src/ward-patient-card/row-elements/ward-patient-gender.component.tsx +27 -0
  78. package/src/ward-patient-card/row-elements/ward-patient-header-address.tsx +16 -15
  79. package/src/ward-patient-card/row-elements/ward-patient-identifier.tsx +53 -0
  80. package/src/ward-patient-card/row-elements/ward-patient-name.tsx +7 -7
  81. package/src/ward-patient-card/row-elements/ward-patient-obs.resource.ts +4 -4
  82. package/src/ward-patient-card/row-elements/ward-patient-obs.tsx +45 -44
  83. package/src/ward-patient-card/row-elements/ward-patient-time-on-ward.tsx +22 -0
  84. package/src/ward-patient-card/row-elements/ward-patient-time-since-admission.tsx +22 -0
  85. package/src/ward-patient-card/ward-patient-card-element.component.tsx +65 -0
  86. package/src/ward-patient-card/ward-patient-card.component.tsx +64 -0
  87. package/src/ward-patient-card/ward-patient-card.scss +61 -12
  88. package/src/ward-patient-workspace/ward-patient-action-button.extension.tsx +18 -0
  89. package/src/ward-patient-workspace/ward-patient.style.scss +11 -0
  90. package/src/ward-patient-workspace/ward-patient.workspace.tsx +51 -0
  91. package/src/ward-view/ward-bed.component.tsx +0 -1
  92. package/src/ward-view/ward-view.component.tsx +114 -76
  93. package/src/ward-view/ward-view.resource.ts +2 -2
  94. package/src/ward-view/ward-view.scss +4 -4
  95. package/src/ward-view/ward-view.test.tsx +76 -49
  96. package/src/ward-view-header/admission-requests-bar.component.tsx +29 -28
  97. package/src/ward-view-header/admission-requests-bar.test.tsx +11 -15
  98. package/src/ward-view-header/admission-requests.scss +20 -25
  99. package/src/ward-view-header/ward-view-header.component.tsx +7 -7
  100. package/src/ward-view-header/ward-view-header.scss +2 -2
  101. package/src/ward-workspace/admission-request-card/admission-request-card-actions.component.tsx +29 -0
  102. package/src/ward-workspace/admission-request-card/admission-request-card-header.component.tsx +51 -0
  103. package/src/ward-workspace/admission-request-card/admission-request-card.component.tsx +16 -0
  104. package/src/ward-workspace/admission-request-card/admission-request-card.scss +49 -0
  105. package/src/ward-workspace/admission-request-workspace/admission-requests-workspace.scss +12 -0
  106. package/src/ward-workspace/admission-request-workspace/admission-requests-workspace.test.tsx +48 -0
  107. package/src/ward-workspace/admission-request-workspace/admission-requests.workspace.tsx +61 -0
  108. package/src/ward-workspace/admit-patient-form-workspace/admit-patient-form.scss +35 -0
  109. package/src/ward-workspace/admit-patient-form-workspace/admit-patient-form.test.tsx +341 -0
  110. package/src/ward-workspace/admit-patient-form-workspace/admit-patient-form.workspace.tsx +267 -0
  111. package/src/ward-workspace/admit-patient-form-workspace/types.ts +7 -0
  112. package/src/ward-workspace/patient-banner/patient-banner.component.tsx +29 -0
  113. package/src/ward-workspace/patient-banner/style.scss +23 -0
  114. package/src/ward-workspace/patient-transfer-bed-swap/patient-bed-swap-form.component.tsx +210 -0
  115. package/src/ward-workspace/patient-transfer-bed-swap/patient-transfer-request-form.component.tsx +238 -0
  116. package/src/ward-workspace/patient-transfer-bed-swap/patient-transfer-swap.scss +73 -0
  117. package/src/ward-workspace/patient-transfer-bed-swap/patient-transfer-swap.workspace.tsx +44 -0
  118. package/src/ward-workspace/ward-patient-notes/form/notes-form.component.tsx +180 -0
  119. package/src/ward-workspace/ward-patient-notes/form/notes-form.scss +30 -0
  120. package/src/ward-workspace/ward-patient-notes/form/notes-form.test.tsx +116 -0
  121. package/src/ward-workspace/ward-patient-notes/history/note.component.tsx +53 -0
  122. package/src/ward-workspace/ward-patient-notes/history/notes-container.component.tsx +55 -0
  123. package/src/ward-workspace/ward-patient-notes/history/notes-container.test.tsx +84 -0
  124. package/src/ward-workspace/ward-patient-notes/history/styles.scss +61 -0
  125. package/src/ward-workspace/ward-patient-notes/notes-action-button.extension.tsx +18 -0
  126. package/src/ward-workspace/ward-patient-notes/notes.resource.ts +71 -0
  127. package/src/ward-workspace/ward-patient-notes/notes.workspace.tsx +25 -0
  128. package/src/ward-workspace/ward-patient-notes/types.ts +44 -0
  129. package/src/ward.resource.ts +25 -0
  130. package/translations/en.json +63 -2
  131. package/dist/443.js +0 -1
  132. package/dist/443.js.map +0 -1
  133. package/dist/589.js +0 -1
  134. package/dist/589.js.map +0 -1
  135. package/dist/695.js +0 -2
  136. package/dist/695.js.map +0 -1
  137. package/src/hooks/useAdmittedPatients.ts +0 -13
  138. package/src/ward-patient-card/row-elements/row-elements.scss +0 -16
  139. package/src/ward-patient-card/ward-patient-card-row.resources.tsx +0 -92
  140. package/src/ward-patient-card/ward-patient-card.tsx +0 -20
  141. package/src/ward-workspace/admission-request-card.component.tsx +0 -23
  142. package/src/ward-workspace/admission-request-card.scss +0 -34
  143. package/src/ward-workspace/admission-request-workspace.test.tsx +0 -38
  144. package/src/ward-workspace/admission-requests-workspace.component.tsx +0 -21
  145. package/src/ward-workspace/admission-requests-workspace.scss +0 -13
  146. /package/dist/{695.js.LICENSE.txt → 793.js.LICENSE.txt} +0 -0
@@ -1,92 +0,0 @@
1
- import { useConfig } from '@openmrs/esm-framework';
2
- import { useMemo } from 'react';
3
- import {
4
- builtInPatientCardElements,
5
- defaultPatientCardElementConfig,
6
- type PatientCardElementDefinition,
7
- type WardConfigObject,
8
- } from '../config-schema';
9
- import type { WardPatientCardElement, WardPatientCardProps } from '../types';
10
- import WardPatientAge from './row-elements/ward-patient-age';
11
- import WardPatientBedNumber from './row-elements/ward-patient-bed-number';
12
- import wardPatientAddress from './row-elements/ward-patient-header-address';
13
- import WardPatientName from './row-elements/ward-patient-name';
14
- import React from 'react';
15
- import styles from './ward-patient-card.scss';
16
- import wardPatientObs from './row-elements/ward-patient-obs';
17
- import wardPatientCodedObsTags from './row-elements/ward-patient-coded-obs-tags';
18
-
19
- export function usePatientCardRows(location: string) {
20
- const { wardPatientCards } = useConfig<WardConfigObject>();
21
- const patientCardRows = useMemo(() => {
22
- const { cardDefinitions, patientCardElementDefinitions } = wardPatientCards;
23
-
24
- // map of patientCardElementId to its corresponding React component
25
- const patientCardElementsMap = new Map<string, WardPatientCardElement>();
26
- for (const elementType of builtInPatientCardElements) {
27
- patientCardElementsMap.set(
28
- elementType,
29
- getPatientCardElementFromDefinition({
30
- id: elementType,
31
- elementType,
32
- config: defaultPatientCardElementConfig,
33
- }),
34
- );
35
- }
36
- for (const patientCardElementDef of patientCardElementDefinitions) {
37
- patientCardElementsMap.set(patientCardElementDef.id, getPatientCardElementFromDefinition(patientCardElementDef));
38
- }
39
-
40
- const cardDefinition = cardDefinitions.find((cardDef) => {
41
- const appliedTo = cardDef.appliedTo;
42
-
43
- return appliedTo == null || appliedTo.some((criteria) => criteria.location == location);
44
- });
45
-
46
- const ret = cardDefinition.rows.map((row) => {
47
- const { rowType, elements } = row;
48
- const patientCardElements = elements.map((patientCardElementId) => {
49
- const slot = patientCardElementsMap.get(patientCardElementId);
50
- return slot;
51
- });
52
-
53
- const WardPatientCardRow: React.FC<WardPatientCardProps> = (props) => {
54
- return (
55
- <div className={styles.wardPatientCardRow + ' ' + (rowType == 'header' ? styles.wardPatientCardHeader : '')}>
56
- {patientCardElements.map((PatientCardElement, i) => (
57
- <PatientCardElement {...props} key={i} />
58
- ))}
59
- </div>
60
- );
61
- };
62
-
63
- return WardPatientCardRow;
64
- });
65
- return ret;
66
- }, [location, wardPatientCards]);
67
-
68
- return patientCardRows;
69
- }
70
-
71
- function getPatientCardElementFromDefinition(
72
- patientCardElementDef: PatientCardElementDefinition,
73
- ): WardPatientCardElement {
74
- const { elementType, config } = patientCardElementDef;
75
- switch (elementType) {
76
- case 'bed-number':
77
- return WardPatientBedNumber;
78
- case 'patient-name':
79
- return WardPatientName;
80
- case 'patient-age':
81
- return WardPatientAge;
82
- case 'patient-address': {
83
- return wardPatientAddress(config.address);
84
- }
85
- case 'patient-obs': {
86
- return wardPatientObs(config.obs);
87
- }
88
- case 'patient-coded-obs-tags': {
89
- return wardPatientCodedObsTags(config.codedObsTags);
90
- }
91
- }
92
- }
@@ -1,20 +0,0 @@
1
- import React from 'react';
2
- import { useParams } from 'react-router-dom';
3
- import { type WardPatientCardProps } from '../types';
4
- import { usePatientCardRows } from './ward-patient-card-row.resources';
5
- import styles from './ward-patient-card.scss';
6
-
7
- const WardPatientCard: React.FC<WardPatientCardProps> = (props) => {
8
- const { locationUuid } = useParams();
9
- const patientCardRows = usePatientCardRows(locationUuid);
10
-
11
- return (
12
- <div className={styles.wardPatientCard}>
13
- {patientCardRows.map((WardPatientCardRow, i) => (
14
- <WardPatientCardRow key={i} {...props} />
15
- ))}
16
- </div>
17
- );
18
- };
19
-
20
- export default WardPatientCard;
@@ -1,23 +0,0 @@
1
- import React from 'react';
2
- import styles from './admission-request-card.scss';
3
- import { useParams } from 'react-router-dom';
4
- import { type Patient } from '@openmrs/esm-framework';
5
- import { usePatientCardRows } from '../ward-patient-card/ward-patient-card-row.resources';
6
-
7
- interface AdmissionRequestCardProps {
8
- patient: Patient;
9
- }
10
-
11
- const AdmissionRequestCard: React.FC<AdmissionRequestCardProps> = ({ patient }) => {
12
- const { locationUuid } = useParams();
13
- const admissionPatientCardSlots = usePatientCardRows(locationUuid);
14
- return (
15
- <div className={styles.admissionRequestCardHeader}>
16
- {admissionPatientCardSlots.map((AdmissionPatientCard, i) => (
17
- <AdmissionPatientCard key={i} patient={patient} bed={null} visit={null} />
18
- ))}
19
- </div>
20
- );
21
- };
22
-
23
- export default AdmissionRequestCard;
@@ -1,34 +0,0 @@
1
- @use '@carbon/styles/scss/type';
2
- @use '@carbon/styles/scss/spacing';
3
- @import '~@openmrs/esm-styleguide/src/vars';
4
-
5
- .admissionRequestCardHeader {
6
- background-color: $ui-03;
7
- padding: spacing.$spacing-03;
8
- border: 1px solid $color-gray-30;
9
- height: fit-content;
10
- color: $color-gray-70;
11
- display: flex;
12
- align-items: center;
13
- flex-wrap: wrap;
14
- > div:not(:first-of-type)::before {
15
- content: '·';
16
- padding: spacing.$spacing-02;
17
- }
18
- }
19
-
20
- .patientName,
21
- .patientGender,
22
- .patientAge {
23
- @include type.type-style('heading-01');
24
- }
25
-
26
- .patientName {
27
- color: $color-gray-100;
28
- }
29
-
30
- .time,
31
- .city,
32
- .ward {
33
- @include type.type-style('body-compact-01');
34
- }
@@ -1,38 +0,0 @@
1
- import { renderWithSwr } from '../../../../tools/test-utils';
2
- import React from 'react';
3
- import AdmissionRequestsWorkspace from './admission-requests-workspace.component';
4
- import {
5
- type ConfigSchema,
6
- type Person,
7
- closeWorkspace,
8
- getDefaultsFromConfigSchema,
9
- useConfig,
10
- } from '@openmrs/esm-framework';
11
- import { configSchema } from '../config-schema';
12
- import { useInpatientRequest } from '../hooks/useInpatientRequest';
13
- import { mockInpatientRequest } from '../../../../__mocks__/ward-patient';
14
-
15
- jest.replaceProperty(mockInpatientRequest.patient.person as Person, 'preferredName', {
16
- uuid: '',
17
- givenName: 'Alice',
18
- familyName: 'Johnson',
19
- });
20
-
21
- jest.mocked(useConfig).mockReturnValue({
22
- ...getDefaultsFromConfigSchema<ConfigSchema>(configSchema),
23
- });
24
-
25
- jest.mock('@openmrs/esm-framework', () => {
26
- return {
27
- ...jest.requireActual('@openmrs/esm-framework'),
28
- closeWorkspace: jest.fn(),
29
- };
30
- });
31
-
32
- describe('Admission Requests Workspace', () => {
33
- it('should render a admission request card', () => {
34
- const { getByText } = renderWithSwr(<AdmissionRequestsWorkspace admissionRequests={[mockInpatientRequest]} />);
35
- const { givenName, familyName } = mockInpatientRequest.patient.person!.preferredName!;
36
- expect(getByText(givenName + ' ' + familyName)).toBeInTheDocument();
37
- });
38
- });
@@ -1,21 +0,0 @@
1
- import React from 'react';
2
- import styles from './admission-requests-workspace.scss';
3
- import AdmissionRequestCard from './admission-request-card.component';
4
- import { type InpatientRequest } from '../types';
5
-
6
- interface AdmissionRequestsWorkspaceProps {
7
- admissionRequests: InpatientRequest[];
8
- }
9
- const AdmissionRequestsWorkspace: React.FC<AdmissionRequestsWorkspaceProps> = ({ admissionRequests }) => {
10
- return (
11
- <div className={styles.admissionRequestsWorkspaceContainer}>
12
- <div className={styles.admissionRequestsWorkspace}>
13
- {admissionRequests.map((admissionRequest) => (
14
- <AdmissionRequestCard patient={admissionRequest.patient} />
15
- ))}
16
- </div>
17
- </div>
18
- );
19
- };
20
-
21
- export default AdmissionRequestsWorkspace;
@@ -1,13 +0,0 @@
1
- @use '@carbon/styles/scss/type';
2
- @use '@carbon/styles/scss/spacing';
3
- @import '~@openmrs/esm-styleguide/src/vars';
4
-
5
- .admissionRequestsWorkspaceContainer {
6
- min-height: var(--desktop-workspace-window-height);
7
- }
8
- .admissionRequestsWorkspace {
9
- padding: spacing.$spacing-04;
10
- display: grid;
11
- grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
12
- gap: 1rem;
13
- }
File without changes