@openmrs/esm-patient-immunizations-app 11.3.1-patch.9310 → 11.3.1-patch.9508

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 (40) hide show
  1. package/.turbo/turbo-build.log +20 -23
  2. package/README.md +170 -1
  3. package/dist/3606.js +1 -1
  4. package/dist/3606.js.map +1 -1
  5. package/dist/3677.js +1 -1
  6. package/dist/3677.js.map +1 -1
  7. package/dist/4055.js +1 -1
  8. package/dist/439.js +1 -0
  9. package/dist/5134.js +2 -0
  10. package/dist/5134.js.map +1 -0
  11. package/dist/5670.js +1 -1
  12. package/dist/5670.js.map +1 -1
  13. package/dist/5858.js +1 -0
  14. package/dist/5858.js.map +1 -0
  15. package/dist/6589.js +1 -0
  16. package/dist/795.js +1 -1
  17. package/dist/795.js.map +1 -1
  18. package/dist/8371.js +1 -0
  19. package/dist/main.js +1 -1
  20. package/dist/main.js.map +1 -1
  21. package/dist/openmrs-esm-patient-immunizations-app.js +1 -1
  22. package/dist/openmrs-esm-patient-immunizations-app.js.buildmanifest.json +122 -56
  23. package/dist/routes.json +1 -1
  24. package/package.json +2 -2
  25. package/src/immunizations/immunization-history-dashboard.component.tsx +12 -10
  26. package/src/immunizations/immunizations-detailed-summary.component.tsx +2 -2
  27. package/src/immunizations/immunizations-detailed-summary.test.tsx +8 -24
  28. package/src/immunizations/immunizations-form.test.tsx +8 -14
  29. package/src/immunizations/immunizations-form.workspace.tsx +162 -157
  30. package/src/immunizations/immunizations-overview.component.tsx +2 -2
  31. package/src/routes.json +6 -12
  32. package/translations/cs.json +47 -0
  33. package/translations/fr.json +4 -4
  34. package/translations/sq.json +47 -0
  35. package/translations/zh_TW.json +47 -0
  36. package/dist/1268.js +0 -2
  37. package/dist/1268.js.map +0 -1
  38. package/dist/7955.js +0 -1
  39. package/dist/7955.js.map +0 -1
  40. /package/dist/{1268.js.LICENSE.txt → 5134.js.LICENSE.txt} +0 -0
@@ -14,9 +14,8 @@ import {
14
14
  useConfig,
15
15
  useLayoutType,
16
16
  useSession,
17
- Workspace2,
18
17
  } from '@openmrs/esm-framework';
19
- import { type PatientWorkspace2DefinitionProps } from '@openmrs/esm-patient-common-lib';
18
+ import { type DefaultPatientWorkspaceProps } from '@openmrs/esm-patient-common-lib';
20
19
  import { DoseInput } from './components/dose-input.component';
21
20
  import { immunizationFormSub } from './utils';
22
21
  import { mapToFHIRImmunizationResource } from './immunization-mapper';
@@ -27,9 +26,13 @@ import { useImmunizations } from '../hooks/useImmunizations';
27
26
  import { useImmunizationsConceptSet } from '../hooks/useImmunizationsConceptSet';
28
27
  import styles from './immunizations-form.scss';
29
28
 
30
- const ImmunizationsForm: React.FC<PatientWorkspace2DefinitionProps<{}, {}>> = ({
29
+ const ImmunizationsForm: React.FC<DefaultPatientWorkspaceProps> = ({
30
+ patient,
31
+ patientUuid,
31
32
  closeWorkspace,
32
- groupProps: { patientUuid, patient, visitContext },
33
+ closeWorkspaceWithSavedChanges,
34
+ promptBeforeClosing,
35
+ visitContext,
33
36
  }) => {
34
37
  const config = useConfig<ImmunizationConfigObject>();
35
38
  const currentUser = useSession();
@@ -42,6 +45,7 @@ const ImmunizationsForm: React.FC<PatientWorkspace2DefinitionProps<{}, {}>> = ({
42
45
  immunizationObsUuid: string;
43
46
  visitUuid?: string;
44
47
  }>();
48
+ const now = useMemo(() => new Date(), []);
45
49
 
46
50
  const immunizationFormSchema = useMemo(() => {
47
51
  return z.object({
@@ -55,7 +59,7 @@ const ImmunizationsForm: React.FC<PatientWorkspace2DefinitionProps<{}, {}>> = ({
55
59
  (date) => {
56
60
  // Normalize both dates to start of day in local timezone
57
61
  const inputDate = dayjs(date).startOf('day');
58
- const today = dayjs().startOf('day');
62
+ const today = dayjs(now).startOf('day');
59
63
  return inputDate.isSame(today) || inputDate.isBefore(today);
60
64
  },
61
65
  {
@@ -70,7 +74,7 @@ const ImmunizationsForm: React.FC<PatientWorkspace2DefinitionProps<{}, {}>> = ({
70
74
  lotNumber: z.string().nullable().optional(),
71
75
  manufacturer: z.string().nullable().optional(),
72
76
  });
73
- }, [patient.birthDate, t]);
77
+ }, [patient.birthDate, t, now]);
74
78
 
75
79
  type ImmunizationFormInputData = z.infer<typeof immunizationFormSchema>;
76
80
  const formProps = useForm<ImmunizationFormInputData>({
@@ -78,7 +82,7 @@ const ImmunizationsForm: React.FC<PatientWorkspace2DefinitionProps<{}, {}>> = ({
78
82
  resolver: zodResolver(immunizationFormSchema),
79
83
  defaultValues: {
80
84
  vaccineUuid: '',
81
- vaccinationDate: dayjs().startOf('day').toDate(),
85
+ vaccinationDate: dayjs(now).startOf('day').toDate(),
82
86
  doseNumber: 1,
83
87
  nextDoseDate: null,
84
88
  note: '',
@@ -96,12 +100,17 @@ const ImmunizationsForm: React.FC<PatientWorkspace2DefinitionProps<{}, {}>> = ({
96
100
  watch,
97
101
  } = formProps;
98
102
  const vaccinationDate = watch('vaccinationDate');
103
+
104
+ useEffect(() => {
105
+ promptBeforeClosing(() => isDirty);
106
+ }, [isDirty, promptBeforeClosing]);
107
+
99
108
  const vaccineUuid = watch('vaccineUuid');
100
109
 
101
110
  useEffect(() => {
102
111
  const sub = immunizationFormSub.subscribe((props) => {
103
112
  if (props) {
104
- const vaccinationDateOrNow = props.vaccinationDate ? parseDate(props.vaccinationDate) : new Date();
113
+ const vaccinationDateOrNow = props.vaccinationDate ? parseDate(props.vaccinationDate) : now;
105
114
  reset({
106
115
  vaccineUuid: props.vaccineUuid,
107
116
  vaccinationDate: vaccinationDateOrNow,
@@ -120,7 +129,7 @@ const ImmunizationsForm: React.FC<PatientWorkspace2DefinitionProps<{}, {}>> = ({
120
129
  sub.unsubscribe();
121
130
  immunizationFormSub.next(null);
122
131
  };
123
- }, [reset]);
132
+ }, [reset, now]);
124
133
 
125
134
  const onSubmit = useCallback(
126
135
  async (data: ImmunizationFormInputData) => {
@@ -161,7 +170,7 @@ const ImmunizationsForm: React.FC<PatientWorkspace2DefinitionProps<{}, {}>> = ({
161
170
  immunizationToEditMeta?.immunizationObsUuid,
162
171
  abortController,
163
172
  );
164
- closeWorkspace({ discardUnsavedChanges: true });
173
+ closeWorkspaceWithSavedChanges();
165
174
  mutate();
166
175
  showSnackbar({
167
176
  kind: 'success',
@@ -184,161 +193,157 @@ const ImmunizationsForm: React.FC<PatientWorkspace2DefinitionProps<{}, {}>> = ({
184
193
  visitContext?.uuid,
185
194
  immunizationToEditMeta,
186
195
  immunizationsConceptSet,
187
- closeWorkspace,
196
+ closeWorkspaceWithSavedChanges,
188
197
  t,
189
198
  mutate,
190
199
  ],
191
200
  );
192
201
  return (
193
- <Workspace2 title={t('immunizationWorkspaceTitle', 'Immunization')} hasUnsavedChanges={isDirty}>
194
- <FormProvider {...formProps}>
195
- <Form className={styles.form} onSubmit={handleSubmit(onSubmit)}>
196
- <Stack gap={5} className={styles.container}>
197
- <ResponsiveWrapper>
198
- <Controller
199
- name="vaccinationDate"
200
- control={control}
201
- render={({ field, fieldState }) => (
202
- <OpenmrsDatePicker
203
- {...field}
204
- className={styles.datePicker}
205
- id="vaccinationDate"
206
- invalid={Boolean(fieldState?.error?.message)}
207
- invalidText={fieldState?.error?.message}
208
- labelText={t('vaccinationDate', 'Vaccination date')}
209
- maxDate={new Date()}
210
- />
211
- )}
212
- />
213
- </ResponsiveWrapper>
214
- <ResponsiveWrapper>
215
- <Controller
216
- name="vaccineUuid"
217
- control={control}
218
- render={({ field: { onChange, value } }) => (
219
- <Dropdown
220
- disabled={!!immunizationToEditMeta}
221
- id="immunization"
222
- invalid={!!errors?.vaccineUuid}
223
- invalidText={errors?.vaccineUuid?.message}
224
- itemToString={(item) =>
225
- immunizationsConceptSet?.answers.find((candidate) => candidate.uuid == item)?.display
226
- }
227
- items={immunizationsConceptSet?.answers?.map((item) => item.uuid) || []}
228
- label={t('selectImmunization', 'Select immunization')}
229
- onChange={(val) => onChange(val.selectedItem)}
230
- selectedItem={value}
231
- titleText={t('immunization', 'Immunization')}
232
- />
233
- )}
234
- />
235
- </ResponsiveWrapper>
236
- {vaccineUuid && (
237
- <ResponsiveWrapper>
238
- <DoseInput vaccine={vaccineUuid} sequences={config.sequenceDefinitions} control={control} />
239
- </ResponsiveWrapper>
240
- )}
241
- <div className={styles.vaccineBatchHeading}>
242
- {t('vaccineBatchInformation', 'Vaccine Batch Information')}
243
- </div>
244
- <ResponsiveWrapper>
245
- <Controller
246
- name="manufacturer"
247
- control={control}
248
- render={({ field: { onChange, value } }) => (
249
- <TextInput
250
- id="manufacturer"
251
- labelText={t('manufacturer', 'Manufacturer')}
252
- onChange={(evt) => onChange(evt.target.value)}
253
- type="text"
254
- value={value}
255
- />
256
- )}
257
- />
258
- </ResponsiveWrapper>
259
- <ResponsiveWrapper>
260
- <Controller
261
- name="lotNumber"
262
- control={control}
263
- render={({ field: { onChange, value } }) => (
264
- <TextInput
265
- id="lotNumber"
266
- labelText={t('lotNumber', 'Lot Number')}
267
- onChange={(evt) => onChange(evt.target.value)}
268
- type="text"
269
- value={value}
270
- />
271
- )}
272
- />
273
- </ResponsiveWrapper>
274
- <ResponsiveWrapper>
275
- <Controller
276
- name="expirationDate"
277
- control={control}
278
- render={({ field, fieldState }) => (
279
- <OpenmrsDatePicker
280
- {...field}
281
- className={styles.datePicker}
282
- id="vaccinationExpiration"
283
- invalid={Boolean(fieldState?.error?.message)}
284
- invalidText={fieldState?.error?.message}
285
- labelText={t('expirationDate', 'Expiration date')}
286
- minDate={vaccinationDate}
287
- />
288
- )}
289
- />
290
- </ResponsiveWrapper>
291
- <ResponsiveWrapper>
292
- <Controller
293
- name="note"
294
- control={control}
295
- render={({ field: { onChange, value } }) => (
296
- <TextArea
297
- enableCounter
298
- id="note"
299
- invalidText={errors?.note?.message}
300
- labelText={t('note', 'Note')}
301
- maxCount={255}
302
- onChange={(evt) => onChange(evt.target.value)}
303
- placeholder={t('immunizationNotePlaceholder', 'For example: mild redness at injection site')}
304
- value={value}
305
- />
306
- )}
307
- />
308
- </ResponsiveWrapper>
202
+ <FormProvider {...formProps}>
203
+ <Form className={styles.form} onSubmit={handleSubmit(onSubmit)}>
204
+ <Stack gap={5} className={styles.container}>
205
+ <ResponsiveWrapper>
206
+ <Controller
207
+ name="vaccinationDate"
208
+ control={control}
209
+ render={({ field, fieldState }) => (
210
+ <OpenmrsDatePicker
211
+ {...field}
212
+ className={styles.datePicker}
213
+ id="vaccinationDate"
214
+ invalid={Boolean(fieldState?.error?.message)}
215
+ invalidText={fieldState?.error?.message}
216
+ labelText={t('vaccinationDate', 'Vaccination date')}
217
+ maxDate={now}
218
+ />
219
+ )}
220
+ />
221
+ </ResponsiveWrapper>
222
+ <ResponsiveWrapper>
223
+ <Controller
224
+ name="vaccineUuid"
225
+ control={control}
226
+ render={({ field: { onChange, value } }) => (
227
+ <Dropdown
228
+ disabled={!!immunizationToEditMeta}
229
+ id="immunization"
230
+ invalid={!!errors?.vaccineUuid}
231
+ invalidText={errors?.vaccineUuid?.message}
232
+ itemToString={(item) =>
233
+ immunizationsConceptSet?.answers.find((candidate) => candidate.uuid == item)?.display
234
+ }
235
+ items={immunizationsConceptSet?.answers?.map((item) => item.uuid) || []}
236
+ label={t('selectImmunization', 'Select immunization')}
237
+ onChange={(val) => onChange(val.selectedItem)}
238
+ selectedItem={value}
239
+ titleText={t('immunization', 'Immunization')}
240
+ />
241
+ )}
242
+ />
243
+ </ResponsiveWrapper>
244
+ {vaccineUuid && (
309
245
  <ResponsiveWrapper>
310
- <Controller
311
- name="nextDoseDate"
312
- control={control}
313
- render={({ field, fieldState }) => (
314
- <OpenmrsDatePicker
315
- {...field}
316
- className={styles.datePicker}
317
- id="nextDoseDate"
318
- invalid={Boolean(fieldState?.error?.message)}
319
- invalidText={fieldState?.error?.message}
320
- labelText={t('nextDoseDate', 'Next dose date')}
321
- minDate={vaccinationDate}
322
- />
323
- )}
324
- />
246
+ <DoseInput vaccine={vaccineUuid} sequences={config.sequenceDefinitions} control={control} />
325
247
  </ResponsiveWrapper>
326
- </Stack>
327
- <ButtonSet className={isTablet ? styles.tablet : styles.desktop}>
328
- <Button className={styles.button} kind="secondary" onClick={() => closeWorkspace()}>
329
- {getCoreTranslation('cancel')}
330
- </Button>
331
- <Button className={styles.button} kind="primary" disabled={isSubmitting} type="submit">
332
- {isSubmitting ? (
333
- <InlineLoading className={styles.spinner} description={t('saving', 'Saving') + '...'} />
334
- ) : (
335
- <span>{getCoreTranslation('save')}</span>
248
+ )}
249
+ <div className={styles.vaccineBatchHeading}>{t('vaccineBatchInformation', 'Vaccine Batch Information')}</div>
250
+ <ResponsiveWrapper>
251
+ <Controller
252
+ name="manufacturer"
253
+ control={control}
254
+ render={({ field: { onChange, value } }) => (
255
+ <TextInput
256
+ id="manufacturer"
257
+ labelText={t('manufacturer', 'Manufacturer')}
258
+ onChange={(evt) => onChange(evt.target.value)}
259
+ type="text"
260
+ value={value}
261
+ />
336
262
  )}
337
- </Button>
338
- </ButtonSet>
339
- </Form>
340
- </FormProvider>
341
- </Workspace2>
263
+ />
264
+ </ResponsiveWrapper>
265
+ <ResponsiveWrapper>
266
+ <Controller
267
+ name="lotNumber"
268
+ control={control}
269
+ render={({ field: { onChange, value } }) => (
270
+ <TextInput
271
+ id="lotNumber"
272
+ labelText={t('lotNumber', 'Lot Number')}
273
+ onChange={(evt) => onChange(evt.target.value)}
274
+ type="text"
275
+ value={value}
276
+ />
277
+ )}
278
+ />
279
+ </ResponsiveWrapper>
280
+ <ResponsiveWrapper>
281
+ <Controller
282
+ name="expirationDate"
283
+ control={control}
284
+ render={({ field, fieldState }) => (
285
+ <OpenmrsDatePicker
286
+ {...field}
287
+ className={styles.datePicker}
288
+ id="vaccinationExpiration"
289
+ invalid={Boolean(fieldState?.error?.message)}
290
+ invalidText={fieldState?.error?.message}
291
+ labelText={t('expirationDate', 'Expiration date')}
292
+ minDate={vaccinationDate}
293
+ />
294
+ )}
295
+ />
296
+ </ResponsiveWrapper>
297
+ <ResponsiveWrapper>
298
+ <Controller
299
+ name="note"
300
+ control={control}
301
+ render={({ field: { onChange, value } }) => (
302
+ <TextArea
303
+ enableCounter
304
+ id="note"
305
+ invalidText={errors?.note?.message}
306
+ labelText={t('note', 'Note')}
307
+ maxCount={255}
308
+ onChange={(evt) => onChange(evt.target.value)}
309
+ placeholder={t('immunizationNotePlaceholder', 'For example: mild redness at injection site')}
310
+ value={value}
311
+ />
312
+ )}
313
+ />
314
+ </ResponsiveWrapper>
315
+ <ResponsiveWrapper>
316
+ <Controller
317
+ name="nextDoseDate"
318
+ control={control}
319
+ render={({ field, fieldState }) => (
320
+ <OpenmrsDatePicker
321
+ {...field}
322
+ className={styles.datePicker}
323
+ id="nextDoseDate"
324
+ invalid={Boolean(fieldState?.error?.message)}
325
+ invalidText={fieldState?.error?.message}
326
+ labelText={t('nextDoseDate', 'Next dose date')}
327
+ minDate={vaccinationDate}
328
+ />
329
+ )}
330
+ />
331
+ </ResponsiveWrapper>
332
+ </Stack>
333
+ <ButtonSet className={isTablet ? styles.tablet : styles.desktop}>
334
+ <Button className={styles.button} kind="secondary" onClick={() => closeWorkspace()}>
335
+ {getCoreTranslation('cancel')}
336
+ </Button>
337
+ <Button className={styles.button} kind="primary" disabled={isSubmitting} type="submit">
338
+ {isSubmitting ? (
339
+ <InlineLoading className={styles.spinner} description={t('saving', 'Saving') + '...'} />
340
+ ) : (
341
+ <span>{getCoreTranslation('save')}</span>
342
+ )}
343
+ </Button>
344
+ </ButtonSet>
345
+ </Form>
346
+ </FormProvider>
342
347
  );
343
348
  };
344
349
 
@@ -14,7 +14,7 @@ import {
14
14
  TableHeader,
15
15
  TableRow,
16
16
  } from '@carbon/react';
17
- import { AddIcon, formatDate, launchWorkspace2, parseDate, usePagination } from '@openmrs/esm-framework';
17
+ import { AddIcon, formatDate, launchWorkspace, parseDate, usePagination } from '@openmrs/esm-framework';
18
18
  import { CardHeader, EmptyState, ErrorState, PatientChartPagination } from '@openmrs/esm-patient-common-lib';
19
19
  import { useImmunizations } from '../hooks/useImmunizations';
20
20
  import styles from './immunizations-overview.scss';
@@ -36,7 +36,7 @@ const ImmunizationsOverview: React.FC<ImmunizationsOverviewProps> = ({ patient,
36
36
  const { data: immunizations, error, isLoading, isValidating } = useImmunizations(patientUuid);
37
37
  const { results: paginatedImmunizations, goTo, currentPage } = usePagination(immunizations ?? [], immunizationsCount);
38
38
 
39
- const launchImmunizationsForm = React.useCallback(() => launchWorkspace2('immunization-form-workspace'), []);
39
+ const launchImmunizationsForm = React.useCallback(() => launchWorkspace('immunization-form-workspace'), []);
40
40
 
41
41
  const tableHeaders = [
42
42
  {
package/src/routes.json CHANGED
@@ -37,23 +37,17 @@
37
37
  }
38
38
  ],
39
39
  "pages": [],
40
- "modals": [
41
- {
42
- "name": "immunization-delete-confirmation-modal",
43
- "component": "deleteImmunizationConfirmationModal"
44
- }
45
- ],
46
- "workspaces2": [
40
+ "workspaces": [
47
41
  {
48
42
  "name": "immunization-form-workspace",
49
- "component": "immunizationFormWorkspace",
50
- "window": "immunization-form-window"
43
+ "title": "immunizationWorkspaceTitle",
44
+ "component": "immunizationFormWorkspace"
51
45
  }
52
46
  ],
53
- "workspaceWindows2": [
47
+ "modals": [
54
48
  {
55
- "name": "immunization-form-window",
56
- "group": "patient-chart"
49
+ "name": "immunization-delete-confirmation-modal",
50
+ "component": "deleteImmunizationConfirmationModal"
57
51
  }
58
52
  ]
59
53
  }
@@ -0,0 +1,47 @@
1
+ {
2
+ "actions": "Actions",
3
+ "add": "Add",
4
+ "addImmunizations": "Add immunizations",
5
+ "deleteImmunization": "Delete immunization",
6
+ "deleting": "Deleting",
7
+ "doseNumber": "Dose {{number}}",
8
+ "doseNumberWithinSeries": "Dose number within series",
9
+ "doses": "Doses",
10
+ "due": "Due",
11
+ "error": "Error",
12
+ "errorSaving": "Error saving vaccination",
13
+ "expirationDate": "Expiration Date",
14
+ "immunization": "Immunization",
15
+ "immunizationDeleteConfirm": "Are you sure you want to delete dose {{doseNumber}} of {{vaccineName}}?",
16
+ "immunizationDeleted": "Immunization deleted",
17
+ "immunizationDeletedSuccess": "Immunization dose deleted successfully",
18
+ "immunizationDeleteError": "Failed to delete immunization: ",
19
+ "immunizationHistory": "Immunization history",
20
+ "immunizationNotePlaceholder": "For example: mild redness at injection site",
21
+ "immunizations": "Immunizations",
22
+ "Immunizations": "Immunizations",
23
+ "immunizations__lower": "immunizations",
24
+ "immunizationsHistory": "Immunizations history",
25
+ "immunizationWorkspaceTitle": "Immunization Form",
26
+ "lastDoseOnDate": "Last dose on {{date}}",
27
+ "lotNumber": "Lot number",
28
+ "manufacturer": "Manufacturer",
29
+ "nextDose": "Next dose",
30
+ "nextDoseDate": "Next dose date",
31
+ "notDue": "Not due",
32
+ "note": "Note",
33
+ "pleaseSelect": "Please select",
34
+ "recentVaccination": "Recent vaccination",
35
+ "saving": "Saving",
36
+ "seeAll": "See all",
37
+ "selectImmunization": "Select immunization",
38
+ "sequence": "Sequence",
39
+ "unknownVaccine": "Unknown vaccine",
40
+ "vaccinationDate": "Vaccination date",
41
+ "vaccinationDateCannotBeBeforeBirthDate": "Vaccination date cannot precede birth date",
42
+ "vaccinationDateCannotBeInTheFuture": "Vaccination date cannot be in the future",
43
+ "vaccinationSaved": "Vaccination saved successfully",
44
+ "vaccine": "Vaccine",
45
+ "vaccineBatchInformation": "Vaccine Batch Information",
46
+ "vaccineRequired": "Vaccine is required"
47
+ }
@@ -6,8 +6,8 @@
6
6
  "deleting": "Suppression en cours",
7
7
  "doseNumber": "Dose {{number}}",
8
8
  "doseNumberWithinSeries": "Numéro de la dose dans la série",
9
- "doses": "Doses",
10
- "due": "Due",
9
+ "doses": "Les doses",
10
+ "due": "",
11
11
  "error": "Erreur",
12
12
  "errorSaving": "Erreur d'enregistrement de la vaccination",
13
13
  "expirationDate": "Date d'expiration",
@@ -17,7 +17,7 @@
17
17
  "immunizationDeletedSuccess": "Dose de vaccination supprimée avec succès",
18
18
  "immunizationDeleteError": "Échec de la supprimer de la vaccination :",
19
19
  "immunizationHistory": "Historique de vaccination",
20
- "immunizationNotePlaceholder": "For example: mild redness at injection site",
20
+ "immunizationNotePlaceholder": "Par exemple : légère rougeur au point d’injection",
21
21
  "immunizations": "Vaccinations",
22
22
  "Immunizations": "Vaccinations",
23
23
  "immunizations__lower": "Vaccinations",
@@ -28,7 +28,7 @@
28
28
  "manufacturer": "Fabricant",
29
29
  "nextDose": "Prochaine dose",
30
30
  "nextDoseDate": "Date de la prochaine dose",
31
- "notDue": "Not due",
31
+ "notDue": "non ",
32
32
  "note": "Note",
33
33
  "pleaseSelect": "Veuillez sélectionner",
34
34
  "recentVaccination": "Vaccination récente",
@@ -0,0 +1,47 @@
1
+ {
2
+ "actions": "Actions",
3
+ "add": "Add",
4
+ "addImmunizations": "Add immunizations",
5
+ "deleteImmunization": "Delete immunization",
6
+ "deleting": "Deleting",
7
+ "doseNumber": "Dose {{number}}",
8
+ "doseNumberWithinSeries": "Dose number within series",
9
+ "doses": "Doses",
10
+ "due": "Due",
11
+ "error": "Error",
12
+ "errorSaving": "Error saving vaccination",
13
+ "expirationDate": "Expiration Date",
14
+ "immunization": "Immunization",
15
+ "immunizationDeleteConfirm": "Are you sure you want to delete dose {{doseNumber}} of {{vaccineName}}?",
16
+ "immunizationDeleted": "Immunization deleted",
17
+ "immunizationDeletedSuccess": "Immunization dose deleted successfully",
18
+ "immunizationDeleteError": "Failed to delete immunization: ",
19
+ "immunizationHistory": "Immunization history",
20
+ "immunizationNotePlaceholder": "For example: mild redness at injection site",
21
+ "immunizations": "Immunizations",
22
+ "Immunizations": "Immunizations",
23
+ "immunizations__lower": "immunizations",
24
+ "immunizationsHistory": "Immunizations history",
25
+ "immunizationWorkspaceTitle": "Immunization Form",
26
+ "lastDoseOnDate": "Last dose on {{date}}",
27
+ "lotNumber": "Lot number",
28
+ "manufacturer": "Manufacturer",
29
+ "nextDose": "Next dose",
30
+ "nextDoseDate": "Next dose date",
31
+ "notDue": "Not due",
32
+ "note": "Note",
33
+ "pleaseSelect": "Please select",
34
+ "recentVaccination": "Recent vaccination",
35
+ "saving": "Saving",
36
+ "seeAll": "See all",
37
+ "selectImmunization": "Select immunization",
38
+ "sequence": "Sequence",
39
+ "unknownVaccine": "Unknown vaccine",
40
+ "vaccinationDate": "Vaccination date",
41
+ "vaccinationDateCannotBeBeforeBirthDate": "Vaccination date cannot precede birth date",
42
+ "vaccinationDateCannotBeInTheFuture": "Vaccination date cannot be in the future",
43
+ "vaccinationSaved": "Vaccination saved successfully",
44
+ "vaccine": "Vaccine",
45
+ "vaccineBatchInformation": "Vaccine Batch Information",
46
+ "vaccineRequired": "Vaccine is required"
47
+ }
@@ -0,0 +1,47 @@
1
+ {
2
+ "actions": "Actions",
3
+ "add": "Add",
4
+ "addImmunizations": "Add immunizations",
5
+ "deleteImmunization": "Delete immunization",
6
+ "deleting": "Deleting",
7
+ "doseNumber": "Dose {{number}}",
8
+ "doseNumberWithinSeries": "Dose number within series",
9
+ "doses": "Doses",
10
+ "due": "Due",
11
+ "error": "Error",
12
+ "errorSaving": "Error saving vaccination",
13
+ "expirationDate": "Expiration Date",
14
+ "immunization": "Immunization",
15
+ "immunizationDeleteConfirm": "Are you sure you want to delete dose {{doseNumber}} of {{vaccineName}}?",
16
+ "immunizationDeleted": "Immunization deleted",
17
+ "immunizationDeletedSuccess": "Immunization dose deleted successfully",
18
+ "immunizationDeleteError": "Failed to delete immunization: ",
19
+ "immunizationHistory": "Immunization history",
20
+ "immunizationNotePlaceholder": "For example: mild redness at injection site",
21
+ "immunizations": "Immunizations",
22
+ "Immunizations": "Immunizations",
23
+ "immunizations__lower": "immunizations",
24
+ "immunizationsHistory": "Immunizations history",
25
+ "immunizationWorkspaceTitle": "Immunization Form",
26
+ "lastDoseOnDate": "Last dose on {{date}}",
27
+ "lotNumber": "Lot number",
28
+ "manufacturer": "Manufacturer",
29
+ "nextDose": "Next dose",
30
+ "nextDoseDate": "Next dose date",
31
+ "notDue": "Not due",
32
+ "note": "Note",
33
+ "pleaseSelect": "Please select",
34
+ "recentVaccination": "Recent vaccination",
35
+ "saving": "Saving",
36
+ "seeAll": "See all",
37
+ "selectImmunization": "Select immunization",
38
+ "sequence": "Sequence",
39
+ "unknownVaccine": "Unknown vaccine",
40
+ "vaccinationDate": "Vaccination date",
41
+ "vaccinationDateCannotBeBeforeBirthDate": "Vaccination date cannot precede birth date",
42
+ "vaccinationDateCannotBeInTheFuture": "Vaccination date cannot be in the future",
43
+ "vaccinationSaved": "Vaccination saved successfully",
44
+ "vaccine": "Vaccine",
45
+ "vaccineBatchInformation": "Vaccine Batch Information",
46
+ "vaccineRequired": "Vaccine is required"
47
+ }