@openmrs/esm-fast-data-entry-app 1.0.0-pre.59 → 1.0.0

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 (193) hide show
  1. package/README.md +21 -2
  2. package/__mocks__/react-i18next.js +9 -14
  3. package/dist/101.js +1 -0
  4. package/dist/101.js.map +1 -0
  5. package/dist/132.js +1 -1
  6. package/dist/188.js +1 -0
  7. package/dist/188.js.map +1 -0
  8. package/dist/197.js +1 -0
  9. package/dist/219.js +1 -0
  10. package/dist/219.js.map +1 -0
  11. package/dist/221.js +1 -0
  12. package/dist/221.js.map +1 -0
  13. package/dist/259.js +1 -0
  14. package/dist/259.js.map +1 -0
  15. package/dist/29.js +2 -0
  16. package/dist/29.js.LICENSE.txt +3 -0
  17. package/dist/29.js.map +1 -0
  18. package/dist/300.js +1 -0
  19. package/dist/326.js +1 -0
  20. package/dist/326.js.map +1 -0
  21. package/dist/335.js +1 -0
  22. package/dist/367.js +1 -0
  23. package/dist/367.js.map +1 -0
  24. package/dist/480.js +1 -0
  25. package/dist/540.js +2 -0
  26. package/dist/{536.js.LICENSE.txt → 540.js.LICENSE.txt} +3 -2
  27. package/dist/540.js.map +1 -0
  28. package/dist/55.js +1 -0
  29. package/dist/564.js +1 -0
  30. package/dist/564.js.map +1 -0
  31. package/dist/602.js +1 -0
  32. package/dist/602.js.map +1 -0
  33. package/dist/626.js +2 -0
  34. package/dist/{294.js.LICENSE.txt → 626.js.LICENSE.txt} +3 -8
  35. package/dist/626.js.map +1 -0
  36. package/dist/652.js +1 -0
  37. package/dist/685.js +1 -0
  38. package/dist/685.js.map +1 -0
  39. package/dist/773.js +2 -0
  40. package/dist/773.js.LICENSE.txt +32 -0
  41. package/dist/773.js.map +1 -0
  42. package/dist/893.js +1 -0
  43. package/dist/893.js.map +1 -0
  44. package/dist/91.js +1 -0
  45. package/dist/91.js.map +1 -0
  46. package/dist/941.js +2 -0
  47. package/dist/941.js.LICENSE.txt +30 -0
  48. package/dist/941.js.map +1 -0
  49. package/dist/961.js +2 -0
  50. package/dist/{935.js.LICENSE.txt → 961.js.LICENSE.txt} +6 -10
  51. package/dist/961.js.map +1 -0
  52. package/dist/99.js +1 -0
  53. package/dist/99.js.map +1 -0
  54. package/dist/991.js +1 -0
  55. package/dist/991.js.map +1 -0
  56. package/dist/main.js +1 -0
  57. package/dist/main.js.map +1 -0
  58. package/dist/openmrs-esm-fast-data-entry-app.js +1 -1
  59. package/dist/openmrs-esm-fast-data-entry-app.js.buildmanifest.json +500 -122
  60. package/dist/openmrs-esm-fast-data-entry-app.js.map +1 -0
  61. package/dist/routes.json +1 -0
  62. package/jest.config.json +21 -18
  63. package/package.json +59 -62
  64. package/prettier.config.js +8 -0
  65. package/src/CancelModal.tsx +42 -0
  66. package/src/CompleteModal.tsx +35 -0
  67. package/src/FormBootstrap.tsx +45 -10
  68. package/src/Root.tsx +11 -9
  69. package/src/add-group-modal/AddGroupModal.tsx +249 -0
  70. package/src/add-group-modal/styles.scss +49 -0
  71. package/src/config-schema.ts +77 -16
  72. package/src/constant.ts +1 -1
  73. package/src/context/FormWorkflowContext.tsx +32 -33
  74. package/src/context/FormWorkflowReducer.ts +53 -67
  75. package/src/context/GroupFormWorkflowContext.tsx +155 -0
  76. package/src/context/GroupFormWorkflowReducer.ts +405 -0
  77. package/src/declarations.d.ts +4 -0
  78. package/src/empty-state/EmptyDataIllustration.tsx +4 -16
  79. package/src/empty-state/EmptyState.tsx +16 -17
  80. package/src/empty-state/styles.scss +14 -14
  81. package/src/form-entry-workflow/FormEntryWorkflow.tsx +89 -125
  82. package/src/{form-review-card → form-entry-workflow/form-review-card}/FormReviewCard.tsx +7 -7
  83. package/src/form-entry-workflow/form-review-card/index.ts +3 -0
  84. package/src/form-entry-workflow/form-review-card/styles.scss +37 -0
  85. package/src/form-entry-workflow/index.ts +1 -1
  86. package/src/form-entry-workflow/patient-banner/PatientBanner.test.tsx +9 -0
  87. package/src/{patient-banner → form-entry-workflow/patient-banner}/PatientBanner.tsx +14 -27
  88. package/src/form-entry-workflow/patient-banner/index.ts +3 -0
  89. package/src/form-entry-workflow/patient-banner/styles.scss +44 -0
  90. package/src/form-entry-workflow/patient-search-header/PatientSearchHeader.tsx +54 -0
  91. package/src/form-entry-workflow/patient-search-header/index.ts +3 -0
  92. package/src/form-entry-workflow/patient-search-header/styles.scss +25 -0
  93. package/src/form-entry-workflow/styles.scss +16 -16
  94. package/src/form-entry-workflow/workflow-review/WorkflowReview.tsx +37 -0
  95. package/src/form-entry-workflow/workflow-review/index.ts +3 -0
  96. package/src/{workflow-review → form-entry-workflow/workflow-review}/styles.scss +0 -4
  97. package/src/forms-app-menu-link.tsx +5 -7
  98. package/src/forms-page/FormsPage.tsx +48 -37
  99. package/src/forms-page/forms-table/FormsTable.tsx +117 -0
  100. package/src/forms-page/forms-table/index.ts +3 -0
  101. package/src/forms-page/forms-table/styles.scss +19 -0
  102. package/src/forms-page/index.ts +1 -1
  103. package/src/forms-page/styles.scss +3 -5
  104. package/src/group-form-entry-workflow/GroupFormEntryWorkflow.tsx +26 -0
  105. package/src/group-form-entry-workflow/GroupSessionWorkspace.tsx +207 -0
  106. package/src/group-form-entry-workflow/SessionDetailsForm.tsx +154 -0
  107. package/src/group-form-entry-workflow/SessionMetaWorkspace.tsx +99 -0
  108. package/src/group-form-entry-workflow/attendance-table/AttendanceTable.tsx +130 -0
  109. package/src/group-form-entry-workflow/attendance-table/index.ts +1 -0
  110. package/src/group-form-entry-workflow/configurable-questions/ConfigurableQuestionsSection.tsx +41 -0
  111. package/src/group-form-entry-workflow/group-display-header/GroupDisplayHeader.test.tsx +9 -0
  112. package/src/group-form-entry-workflow/group-display-header/GroupDisplayHeader.tsx +55 -0
  113. package/src/group-form-entry-workflow/group-display-header/index.ts +3 -0
  114. package/src/group-form-entry-workflow/group-display-header/styles.scss +60 -0
  115. package/src/group-form-entry-workflow/group-search/CompactGroupResults.tsx +128 -0
  116. package/src/group-form-entry-workflow/group-search/CompactGroupSearch.tsx +66 -0
  117. package/src/group-form-entry-workflow/group-search/GroupSearch.tsx +134 -0
  118. package/src/group-form-entry-workflow/group-search/compact-group-result.scss +63 -0
  119. package/src/group-form-entry-workflow/group-search/compact-group-search.scss +34 -0
  120. package/src/group-form-entry-workflow/group-search/group-search.scss +93 -0
  121. package/src/group-form-entry-workflow/group-search-header/GroupSearchHeader.tsx +72 -0
  122. package/src/group-form-entry-workflow/group-search-header/index.ts +3 -0
  123. package/src/group-form-entry-workflow/group-search-header/styles.scss +20 -0
  124. package/src/group-form-entry-workflow/index.ts +3 -0
  125. package/src/group-form-entry-workflow/styles.scss +94 -0
  126. package/src/hooks/index.ts +7 -5
  127. package/src/hooks/useForm.ts +56 -0
  128. package/src/hooks/useFormState.ts +3 -3
  129. package/src/hooks/useGetAllForms.ts +7 -15
  130. package/src/hooks/useGetEncounter.ts +3 -3
  131. package/src/hooks/useGetPatient.ts +3 -3
  132. package/src/hooks/useGetPatients.ts +32 -0
  133. package/src/hooks/useGetSystemSetting.ts +36 -0
  134. package/src/hooks/useKeyPress.ts +31 -0
  135. package/src/hooks/usePostEndpoint.ts +76 -0
  136. package/src/hooks/useSearchEndpoint.ts +103 -0
  137. package/src/hooks/useStartVisit.ts +82 -0
  138. package/src/index.ts +12 -72
  139. package/src/patient-card/PatientCard.tsx +10 -20
  140. package/src/patient-card/index.ts +1 -1
  141. package/src/patient-card/styles.scss +8 -8
  142. package/src/routes.json +24 -0
  143. package/src/setup-tests.ts +1 -1
  144. package/src/types.ts +20 -0
  145. package/tools/i18next-parser.config.js +93 -0
  146. package/translations/am.json +75 -0
  147. package/translations/ar.json +75 -0
  148. package/translations/en.json +57 -2
  149. package/translations/es.json +75 -0
  150. package/translations/fr.json +75 -0
  151. package/translations/he.json +75 -0
  152. package/translations/km.json +75 -0
  153. package/turbo.json +18 -0
  154. package/webpack.config.js +1 -1
  155. package/.editorconfig +0 -12
  156. package/.eslintignore +0 -2
  157. package/.eslintrc.js +0 -10
  158. package/.github/pull_request_template.md +0 -18
  159. package/.github/workflows/node.js.yml +0 -121
  160. package/.husky/pre-push +0 -1
  161. package/.prettierignore +0 -14
  162. package/dist/187.js +0 -1
  163. package/dist/247.js +0 -1
  164. package/dist/294.js +0 -2
  165. package/dist/312.js +0 -1
  166. package/dist/412.js +0 -1
  167. package/dist/536.js +0 -2
  168. package/dist/574.js +0 -1
  169. package/dist/592.js +0 -1
  170. package/dist/595.js +0 -2
  171. package/dist/595.js.LICENSE.txt +0 -1
  172. package/dist/776.js +0 -1
  173. package/dist/804.js +0 -1
  174. package/dist/880.js +0 -2
  175. package/dist/880.js.LICENSE.txt +0 -20
  176. package/dist/906.js +0 -1
  177. package/dist/935.js +0 -2
  178. package/dist/990.js +0 -1
  179. package/dist/openmrs-esm-fast-data-entry-app.old +0 -1
  180. package/src/declarations.d.tsx +0 -2
  181. package/src/form-review-card/index.ts +0 -3
  182. package/src/form-review-card/styles.scss +0 -38
  183. package/src/forms-table/FormsTable.tsx +0 -123
  184. package/src/forms-table/index.ts +0 -3
  185. package/src/forms-table/styles.scss +0 -20
  186. package/src/patient-banner/PatientBanner.test.tsx +0 -9
  187. package/src/patient-banner/index.ts +0 -3
  188. package/src/patient-banner/styles.scss +0 -44
  189. package/src/patient-search-header/PatientSearchHeader.tsx +0 -61
  190. package/src/patient-search-header/index.ts +0 -3
  191. package/src/patient-search-header/styles.scss +0 -21
  192. package/src/workflow-review/WorkflowReview.tsx +0 -35
  193. package/src/workflow-review/index.ts +0 -3
@@ -0,0 +1,405 @@
1
+ import { navigate } from '@openmrs/esm-framework';
2
+ import { initialWorkflowState } from './FormWorkflowContext';
3
+ import { v4 as uuid } from 'uuid';
4
+
5
+ export const fdeGroupWorkflowStorageVersion = '1.0.5';
6
+ export const fdeGroupWorkflowStorageName = 'openmrs:fastDataEntryGroupWorkflowState';
7
+ const persistData = (data) => {
8
+ localStorage.setItem(fdeGroupWorkflowStorageName + ':' + data.userUuid, JSON.stringify(data));
9
+ };
10
+
11
+ const initialFormState = {
12
+ workflowState: 'NEW_GROUP_SESSION',
13
+ groupUuid: null,
14
+ groupName: null,
15
+ groupMembers: [],
16
+ activePatientUuid: null,
17
+ activeEncounterUuid: null,
18
+ activeVisitUuid: null,
19
+ activeSessionUuid: null,
20
+ patientUuids: [],
21
+ encounters: {},
22
+ visits: {},
23
+ };
24
+
25
+ const reducer = (state, action) => {
26
+ switch (action.type) {
27
+ case 'INITIALIZE_WORKFLOW_STATE': {
28
+ const savedData = localStorage.getItem(fdeGroupWorkflowStorageName + ':' + action.userUuid);
29
+ const savedDataObject = savedData ? JSON.parse(savedData) : {};
30
+ let newState: { [key: string]: unknown } = {};
31
+ if (savedData && savedDataObject['_storageVersion'] === fdeGroupWorkflowStorageVersion) {
32
+ // there is localStorage data and it is still valid
33
+ const thisSavedForm = savedDataObject.forms?.[action.activeFormUuid];
34
+ // set active patient to the last one we were on
35
+ const activePatientUuid =
36
+ thisSavedForm?.activePatientUuid ||
37
+ // or set it to the first member in the list
38
+ thisSavedForm?.patientUuids?.[0] ||
39
+ // something probably went wrong...
40
+ null;
41
+ const activeSessionUuid = thisSavedForm?.activeSessionUuid || uuid();
42
+ newState = {
43
+ ...savedDataObject,
44
+ // set current form to this one
45
+ activeFormUuid: action.activeFormUuid,
46
+ forms: {
47
+ ...savedDataObject.forms,
48
+ // initialize this particular form if it hasn't been created already
49
+ [action.activeFormUuid]: {
50
+ ...initialFormState,
51
+ ...thisSavedForm,
52
+ activePatientUuid: activePatientUuid,
53
+ activeEncounterUuid: thisSavedForm?.encounters?.[activePatientUuid] || null,
54
+ activeVisitUuid: thisSavedForm?.visits?.[activePatientUuid] || null,
55
+ activeSessionUuid: activeSessionUuid,
56
+ },
57
+ },
58
+ };
59
+ } else {
60
+ // no localStorage data, or we should void it
61
+ newState = {
62
+ ...initialWorkflowState,
63
+ _storageVersion: fdeGroupWorkflowStorageVersion,
64
+ forms: {
65
+ [action.activeFormUuid]: initialFormState,
66
+ },
67
+ activeFormUuid: action.activeFormUuid,
68
+ userUuid: action.userUuid,
69
+ };
70
+ }
71
+ persistData(newState);
72
+ return newState;
73
+ }
74
+
75
+ case 'SET_GROUP': {
76
+ const newState = {
77
+ ...state,
78
+ forms: {
79
+ ...state.forms,
80
+ [state.activeFormUuid]: {
81
+ ...state.forms[state.activeFormUuid],
82
+ groupUuid: action.group.uuid,
83
+ groupName: action.group.name,
84
+ patientUuids:
85
+ // this translation is not preferred
86
+ // the only reason we tollerate it here is beause it should be the only time
87
+ // we add cohort information to state
88
+ action.group.cohortMembers?.map((member) => member?.patient?.uuid) ?? [],
89
+ groupMembers: action.group.cohortMembers?.map((member) => member?.patient?.uuid) ?? [],
90
+ activePatientUuid: null,
91
+ activeEncounterUuid: null,
92
+ activeVisitUuid: null,
93
+ activeSessionUuid: null,
94
+ },
95
+ },
96
+ };
97
+ persistData(newState);
98
+ return newState;
99
+ }
100
+ case 'UNSET_GROUP': {
101
+ const newState = {
102
+ ...state,
103
+ forms: {
104
+ ...state.forms,
105
+ [state.activeFormUuid]: {
106
+ ...state.forms[state.activeFormUuid],
107
+ groupUuid: null,
108
+ groupName: null,
109
+ patientUuids: [],
110
+ groupMembers: [],
111
+ activePatientUuid: null,
112
+ activeEncounterUuid: null,
113
+ activeVisitUuid: null,
114
+ activeSessionUuid: null,
115
+ },
116
+ },
117
+ };
118
+ persistData(newState);
119
+ return newState;
120
+ }
121
+ case 'SET_SESSION_META': {
122
+ // requires that group is already entered and contains patientUuids
123
+ const newState = {
124
+ ...state,
125
+ forms: {
126
+ ...state.forms,
127
+ [state.activeFormUuid]: {
128
+ ...state.forms[state.activeFormUuid],
129
+ sessionMeta: action.meta,
130
+ activePatientUuid: state.forms[state.activeFormUuid].patientUuids?.[0],
131
+ activeEncounterUuid:
132
+ state.forms[state.activeFormUuid].encounters[state.forms[state.activeFormUuid].patientUuids?.[0]] || null,
133
+ activeVisitUuid:
134
+ state.forms[state.activeFormUuid].visits[state.forms[state.activeFormUuid].patientUuids?.[0]] || null,
135
+ activeSessionUuid: uuid(),
136
+ workflowState: 'EDIT_FORM',
137
+ },
138
+ },
139
+ };
140
+ persistData(newState);
141
+ return newState;
142
+ }
143
+ case 'ADD_PATIENT_UUID': {
144
+ if (state.forms[state.activeFormUuid].patientUuids.includes(action.patientUuid)) {
145
+ return state;
146
+ }
147
+
148
+ const newState = {
149
+ ...state,
150
+ forms: {
151
+ ...state.forms,
152
+ [state.activeFormUuid]: {
153
+ ...state.forms[state.activeFormUuid],
154
+ patientUuids: [...state.forms[state.activeFormUuid].patientUuids, action.patientUuid],
155
+ },
156
+ },
157
+ };
158
+ persistData(newState);
159
+ return newState;
160
+ }
161
+ case 'REMOVE_PATIENT_UUID': {
162
+ const newState = {
163
+ ...state,
164
+ forms: {
165
+ ...state.forms,
166
+ [state.activeFormUuid]: {
167
+ ...state.forms[state.activeFormUuid],
168
+ patientUuids: state.forms[state.activeFormUuid].patientUuids?.filter((uuid) => action.patientUuid !== uuid),
169
+ },
170
+ },
171
+ };
172
+ persistData(newState);
173
+ return newState;
174
+ }
175
+ case 'SAVE_ENCOUNTER': {
176
+ const thisForm = state.forms[state.activeFormUuid];
177
+ if (thisForm.workflowState === 'SUBMIT_FOR_COMPLETE') {
178
+ const { [state.activeFormUuid]: activeForm, ...formRest } = state.forms;
179
+ const newState = {
180
+ ...state,
181
+ forms: formRest,
182
+ activeFormUuid: null,
183
+ };
184
+ persistData(newState);
185
+ // eslint-disable-next-line
186
+ navigate({ to: '${openmrsSpaBase}/forms' });
187
+ return newState;
188
+ } else if (thisForm.workflowState === 'SUBMIT_FOR_NEXT') {
189
+ const nextPatientUuid = state.nextPatientUuid
190
+ ? state.nextPatientUuid
191
+ : thisForm.patientUuids[
192
+ Math.min(thisForm.patientUuids.indexOf(thisForm.activePatientUuid) + 1, thisForm.patientUuids.length - 1)
193
+ ];
194
+ const encounters = {
195
+ ...thisForm.encounters,
196
+ [thisForm.activePatientUuid]: action.encounterUuid,
197
+ };
198
+ const newState = {
199
+ ...state,
200
+ forms: {
201
+ ...state.forms,
202
+ [state.activeFormUuid]: {
203
+ ...thisForm,
204
+ encounters,
205
+ activePatientUuid: nextPatientUuid,
206
+ activeEncounterUuid: encounters[nextPatientUuid] || null,
207
+ activeVisitUuid: thisForm.visits[nextPatientUuid] || null,
208
+ activeSessionUuid: thisForm.activeSessionUuid,
209
+ workflowState: 'EDIT_FORM',
210
+ },
211
+ },
212
+ };
213
+ persistData(newState);
214
+ return newState;
215
+ } else return state;
216
+ }
217
+ case 'EDIT_ENCOUNTER': {
218
+ const newState = {
219
+ ...state,
220
+ forms: {
221
+ ...state.forms,
222
+ [state.activeFormUuid]: {
223
+ ...state.forms[state.activeFormUuid],
224
+ activeEncounterUuid: state.forms[state.activeFormUuid].encounters[action.patientUuid],
225
+ activeVisitUuid: state.forms[state.activeFormUuid].visits[action.patientUuid],
226
+ activePatientUuid: action.patientUuid,
227
+ activeSessionUuid: action.activeSessionUuid,
228
+ workflowState: 'EDIT_FORM',
229
+ },
230
+ },
231
+ };
232
+ persistData(newState);
233
+ return newState;
234
+ }
235
+ case 'VALIDATE_FOR_NEXT':
236
+ // this state should not be persisted
237
+ window.dispatchEvent(
238
+ new CustomEvent('ampath-form-action', {
239
+ detail: {
240
+ formUuid: state.activeFormUuid,
241
+ patientUuid: state.forms[state.activeFormUuid].activePatientUuid,
242
+ action: 'validateForm',
243
+ },
244
+ }),
245
+ );
246
+ return {
247
+ ...state,
248
+ forms: {
249
+ ...state.forms,
250
+ [state.activeFormUuid]: {
251
+ ...state.forms[state.activeFormUuid],
252
+ workflowState: 'VALIDATE_FOR_NEXT',
253
+ },
254
+ },
255
+ };
256
+ case 'UPDATE_VISIT_UUID':
257
+ // this state should not be persisted
258
+ // we don't pers
259
+ return {
260
+ ...state,
261
+ forms: {
262
+ ...state.forms,
263
+ [state.activeFormUuid]: {
264
+ ...state.forms[state.activeFormUuid],
265
+ visits: {
266
+ ...state.forms[state.activeFormUuid].visits,
267
+ [state.forms[state.activeFormUuid].activePatientUuid]: action.visitUuid,
268
+ },
269
+ activeVisitUuid: action.visitUuid,
270
+ },
271
+ },
272
+ };
273
+
274
+ case 'SUBMIT_FOR_NEXT':
275
+ // this state should not be persisted
276
+ window.dispatchEvent(
277
+ new CustomEvent('ampath-form-action', {
278
+ detail: {
279
+ formUuid: state.activeFormUuid,
280
+ patientUuid: state.forms[state.activeFormUuid].activePatientUuid,
281
+ action: 'onSubmit',
282
+ },
283
+ }),
284
+ );
285
+ return {
286
+ ...state,
287
+ forms: {
288
+ ...state.forms,
289
+ [state.activeFormUuid]: {
290
+ ...state.forms[state.activeFormUuid],
291
+ workflowState: 'SUBMIT_FOR_NEXT',
292
+ },
293
+ },
294
+ nextPatientUuid: action.nextPatientUuid,
295
+ };
296
+ case 'SUBMIT_FOR_REVIEW':
297
+ // this state should not be persisted
298
+ window.dispatchEvent(
299
+ new CustomEvent('ampath-form-action', {
300
+ detail: {
301
+ formUuid: state.activeFormUuid,
302
+ patientUuid: state.forms[state.activeFormUuid].activePatientUuid,
303
+ action: 'onSubmit',
304
+ },
305
+ }),
306
+ );
307
+ return {
308
+ ...state,
309
+ forms: {
310
+ ...state.forms,
311
+ [state.activeFormUuid]: {
312
+ ...state.forms[state.activeFormUuid],
313
+ workflowState: 'SUBMIT_FOR_REVIEW',
314
+ },
315
+ },
316
+ };
317
+
318
+ case 'VALIDATE_FOR_COMPLETE':
319
+ // this state should not be persisted
320
+ window.dispatchEvent(
321
+ new CustomEvent('ampath-form-action', {
322
+ detail: {
323
+ formUuid: state.activeFormUuid,
324
+ patientUuid: state.forms[state.activeFormUuid].activePatientUuid,
325
+ action: 'validateForm',
326
+ },
327
+ }),
328
+ );
329
+ return {
330
+ ...state,
331
+ forms: {
332
+ ...state.forms,
333
+ [state.activeFormUuid]: {
334
+ ...state.forms[state.activeFormUuid],
335
+ workflowState: 'VALIDATE_FOR_COMPLETE',
336
+ },
337
+ },
338
+ };
339
+ case 'SUBMIT_FOR_COMPLETE':
340
+ // this state should not be persisted
341
+ window.dispatchEvent(
342
+ new CustomEvent('ampath-form-action', {
343
+ detail: {
344
+ formUuid: state.activeFormUuid,
345
+ patientUuid: state.forms[state.activeFormUuid].activePatientUuid,
346
+ action: 'onSubmit',
347
+ },
348
+ }),
349
+ );
350
+ return {
351
+ ...state,
352
+ forms: {
353
+ ...state.forms,
354
+ [state.activeFormUuid]: {
355
+ ...state.forms[state.activeFormUuid],
356
+ workflowState: 'SUBMIT_FOR_COMPLETE',
357
+ },
358
+ },
359
+ };
360
+ case 'GO_TO_REVIEW': {
361
+ const newState = {
362
+ ...state,
363
+ forms: {
364
+ ...state.forms,
365
+ [state.activeFormUuid]: {
366
+ ...state.forms[state.activeFormUuid],
367
+ activeEncounterUuid: null,
368
+ activVisitUuid: null,
369
+ activePatientUuid: null,
370
+ activeSessionUuid: null,
371
+ workflowState: 'REVIEW',
372
+ },
373
+ },
374
+ };
375
+ persistData(newState);
376
+ return newState;
377
+ }
378
+ case 'DESTROY_SESSION': {
379
+ const { [state.activeFormUuid]: activeForm, ...formRest } = state.forms;
380
+ const newState = {
381
+ ...state,
382
+ forms: formRest,
383
+ activeFormUuid: null,
384
+ };
385
+ persistData(newState);
386
+ //eslint-disable-next-line
387
+ navigate({ to: '${openmrsSpaBase}/forms' });
388
+ return { ...newState, formDestroyed: true };
389
+ }
390
+ case 'CLOSE_SESSION': {
391
+ const newState = {
392
+ ...state,
393
+ activeFormUuid: null,
394
+ };
395
+ persistData(newState);
396
+ //eslint-disable-next-line
397
+ navigate({ to: '${openmrsSpaBase}/forms' });
398
+ return newState;
399
+ }
400
+ default:
401
+ return state;
402
+ }
403
+ };
404
+
405
+ export default reducer;
@@ -0,0 +1,4 @@
1
+ declare module '@carbon/react';
2
+ declare module '*.css';
3
+ declare module '*.scss';
4
+ declare type SideNavProps = object;
@@ -1,6 +1,6 @@
1
- import React from "react";
1
+ import React from 'react';
2
2
 
3
- export const EmptyDataIllustration = ({ width = "64", height = "64" }) => {
3
+ export const EmptyDataIllustration = ({ width = '64', height = '64' }) => {
4
4
  return (
5
5
  <svg width={width} height={height} viewBox="0 0 64 64">
6
6
  <title>Empty data illustration</title>
@@ -18,13 +18,7 @@ export const EmptyDataIllustration = ({ width = "64", height = "64" }) => {
18
18
  fill="#C6C6C6"
19
19
  />
20
20
  <circle fill="#C6C6C6" cx={17.636} cy={2.314} r={1.855} />
21
- <circle
22
- fill="#FFF"
23
- fillRule="nonzero"
24
- cx={17.636}
25
- cy={2.314}
26
- r={1.175}
27
- />
21
+ <circle fill="#FFF" fillRule="nonzero" cx={17.636} cy={2.314} r={1.175} />
28
22
  <path
29
23
  d="M55.893 53.995H24.544a.79.79 0 01-.788-.789V15.644a.79.79 0 01.788-.788h31.349a.79.79 0 01.788.788v37.562a.79.79 0 01-.788.789z"
30
24
  fill="#F4F4F4"
@@ -38,13 +32,7 @@ export const EmptyDataIllustration = ({ width = "64", height = "64" }) => {
38
32
  fill="#C6C6C6"
39
33
  />
40
34
  <circle fill="#C6C6C6" cx={40.218} cy={9.755} r={1.855} />
41
- <circle
42
- fill="#FFF"
43
- fillRule="nonzero"
44
- cx={40.218}
45
- cy={9.755}
46
- r={1.13}
47
- />
35
+ <circle fill="#FFF" fillRule="nonzero" cx={40.218} cy={9.755} r={1.13} />
48
36
  </g>
49
37
  </svg>
50
38
  );
@@ -1,27 +1,26 @@
1
- import React from "react";
2
- import { Tile } from "carbon-components-react";
3
- import styles from "./styles.scss";
4
- import { useLayoutType } from "@openmrs/esm-framework";
5
- import { EmptyDataIllustration } from "./EmptyDataIllustration";
1
+ import React from 'react';
2
+ import { Tile, Layer } from '@carbon/react';
3
+ import styles from './styles.scss';
4
+ import { useLayoutType } from '@openmrs/esm-framework';
5
+ import { EmptyDataIllustration } from './EmptyDataIllustration';
6
6
 
7
7
  export interface EmptyStateProps {
8
8
  headerTitle: string;
9
9
  displayText: string;
10
10
  }
11
- const EmptyState: React.FC<EmptyStateProps> = ({
12
- headerTitle,
13
- displayText,
14
- }) => {
15
- const isTablet = useLayoutType() === "tablet";
11
+ const EmptyState: React.FC<EmptyStateProps> = ({ headerTitle, displayText }) => {
12
+ const isTablet = useLayoutType() === 'tablet';
16
13
 
17
14
  return (
18
- <Tile light className={styles.tile}>
19
- <div className={isTablet ? styles.tabletHeading : styles.desktopHeading}>
20
- <h4>{headerTitle}</h4>
21
- </div>
22
- <EmptyDataIllustration />
23
- <p className={styles.content}>{displayText}</p>
24
- </Tile>
15
+ <Layer>
16
+ <Tile className={styles.tile}>
17
+ <div className={isTablet ? styles.tabletHeading : styles.desktopHeading}>
18
+ <h4>{headerTitle}</h4>
19
+ </div>
20
+ <EmptyDataIllustration />
21
+ <p className={styles.content}>{displayText}</p>
22
+ </Tile>
23
+ </Layer>
25
24
  );
26
25
  };
27
26
 
@@ -1,36 +1,36 @@
1
- @import "~@openmrs/esm-styleguide/src/vars";
2
- @import "~carbon-components/src/globals/scss/vars";
3
- @import "~carbon-components/src/globals/scss/mixins";
1
+ @use '@carbon/colors';
2
+ @use '@carbon/layout';
3
+ @use '@carbon/type';
4
4
 
5
5
  .action {
6
- margin-bottom: $spacing-03;
6
+ margin-bottom: layout.$spacing-03;
7
7
  }
8
8
 
9
9
  .content {
10
- @include carbon--type-style("productive-heading-01");
11
- color: $text-02;
12
- margin-top: $spacing-05;
13
- margin-bottom: $spacing-03;
10
+ @include type.type-style("heading-compact-01");
11
+ color: colors.$gray-70;
12
+ margin-top: layout.$spacing-05;
13
+ margin-bottom: layout.$spacing-03;
14
14
  }
15
15
 
16
16
  .desktopHeading {
17
17
  h4 {
18
- @include carbon--type-style('productive-heading-02');
19
- color: $text-02;
18
+ @include type.type-style('heading-compact-02');
19
+ color: colors.$gray-70;
20
20
  }
21
21
  }
22
22
 
23
23
  .tabletHeading {
24
24
  h4 {
25
- @include carbon--type-style('productive-heading-03');
26
- color: $text-02;
25
+ @include type.type-style('heading-03');
26
+ color: colors.$gray-70;
27
27
  }
28
28
  }
29
29
 
30
30
  .desktopHeading, .tabletHeading {
31
31
  text-align: left;
32
32
  text-transform: capitalize;
33
- margin-bottom: $spacing-05;
33
+ margin-bottom: layout.$spacing-05;
34
34
 
35
35
  h4:after {
36
36
  content: "";
@@ -51,5 +51,5 @@
51
51
 
52
52
  .tile {
53
53
  text-align: center;
54
- border: 1px solid $ui-03;
54
+ border: 1px solid colors.$gray-20;
55
55
  }