@openmrs/esm-fast-data-entry-app 1.0.1-pre.93 → 1.1.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 (178) hide show
  1. package/__mocks__/react-i18next.js +9 -14
  2. package/dist/12.js +1 -0
  3. package/dist/12.js.map +1 -0
  4. package/dist/132.js +1 -1
  5. package/dist/151.js +2 -0
  6. package/dist/151.js.LICENSE.txt +5 -0
  7. package/dist/151.js.map +1 -0
  8. package/dist/195.js +1 -0
  9. package/dist/195.js.map +1 -0
  10. package/dist/197.js +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/265.js +1 -0
  16. package/dist/265.js.map +1 -0
  17. package/dist/269.js +1 -0
  18. package/dist/269.js.map +1 -0
  19. package/dist/300.js +1 -0
  20. package/dist/335.js +1 -0
  21. package/dist/367.js +1 -0
  22. package/dist/367.js.map +1 -0
  23. package/dist/384.js +1 -0
  24. package/dist/384.js.map +1 -0
  25. package/dist/540.js +2 -0
  26. package/dist/540.js.map +1 -0
  27. package/dist/55.js +1 -0
  28. package/dist/579.js +1 -0
  29. package/dist/579.js.map +1 -0
  30. package/dist/595.js +1 -1
  31. package/dist/595.js.LICENSE.txt +34 -2
  32. package/dist/595.js.map +1 -0
  33. package/dist/602.js +1 -0
  34. package/dist/602.js.map +1 -0
  35. package/dist/616.js +1 -0
  36. package/dist/616.js.map +1 -0
  37. package/dist/626.js +2 -0
  38. package/dist/626.js.map +1 -0
  39. package/dist/652.js +1 -0
  40. package/dist/77.js +1 -0
  41. package/dist/77.js.map +1 -0
  42. package/dist/773.js +2 -0
  43. package/dist/{68.js.LICENSE.txt → 773.js.LICENSE.txt} +13 -2
  44. package/dist/773.js.map +1 -0
  45. package/dist/88.js +1 -0
  46. package/dist/88.js.map +1 -0
  47. package/dist/930.js +1 -0
  48. package/dist/930.js.map +1 -0
  49. package/dist/961.js +2 -0
  50. package/dist/961.js.map +1 -0
  51. package/dist/983.js +1 -0
  52. package/dist/983.js.map +1 -0
  53. package/dist/99.js +1 -0
  54. package/dist/main.js +1 -1
  55. package/dist/main.js.map +1 -0
  56. package/dist/openmrs-esm-fast-data-entry-app.js +1 -1
  57. package/dist/openmrs-esm-fast-data-entry-app.js.buildmanifest.json +380 -156
  58. package/dist/openmrs-esm-fast-data-entry-app.js.map +1 -0
  59. package/dist/routes.json +1 -0
  60. package/jest.config.json +2 -1
  61. package/package.json +41 -35
  62. package/prettier.config.js +8 -0
  63. package/src/CancelModal.tsx +9 -15
  64. package/src/CompleteModal.tsx +7 -18
  65. package/src/FormBootstrap.tsx +31 -18
  66. package/src/Root.tsx +7 -12
  67. package/src/add-group-modal/AddGroupModal.tsx +73 -112
  68. package/src/add-group-modal/styles.scss +7 -3
  69. package/src/config-schema.ts +63 -24
  70. package/src/constant.ts +1 -1
  71. package/src/context/FormWorkflowContext.tsx +26 -39
  72. package/src/context/FormWorkflowReducer.ts +50 -74
  73. package/src/context/GroupFormWorkflowContext.tsx +40 -59
  74. package/src/context/GroupFormWorkflowReducer.ts +84 -109
  75. package/src/declarations.d.ts +3 -0
  76. package/src/empty-state/EmptyDataIllustration.tsx +4 -16
  77. package/src/empty-state/EmptyState.tsx +8 -13
  78. package/src/empty-state/styles.scss +14 -14
  79. package/src/form-entry-workflow/FormEntryWorkflow.tsx +43 -55
  80. package/src/form-entry-workflow/form-review-card/FormReviewCard.tsx +7 -7
  81. package/src/form-entry-workflow/form-review-card/index.ts +1 -1
  82. package/src/form-entry-workflow/form-review-card/styles.scss +9 -11
  83. package/src/form-entry-workflow/index.ts +1 -1
  84. package/src/form-entry-workflow/patient-banner/PatientBanner.test.tsx +5 -5
  85. package/src/form-entry-workflow/patient-banner/PatientBanner.tsx +14 -27
  86. package/src/form-entry-workflow/patient-banner/index.ts +1 -1
  87. package/src/form-entry-workflow/patient-banner/styles.scss +11 -12
  88. package/src/form-entry-workflow/patient-search-header/PatientSearchHeader.tsx +19 -28
  89. package/src/form-entry-workflow/patient-search-header/index.ts +1 -1
  90. package/src/form-entry-workflow/patient-search-header/styles.scss +13 -10
  91. package/src/form-entry-workflow/styles.scss +11 -13
  92. package/src/form-entry-workflow/workflow-review/WorkflowReview.tsx +13 -11
  93. package/src/form-entry-workflow/workflow-review/index.ts +1 -1
  94. package/src/form-entry-workflow/workflow-review/styles.scss +0 -4
  95. package/src/forms-app-menu-link.tsx +4 -6
  96. package/src/forms-page/FormsPage.tsx +23 -51
  97. package/src/forms-page/forms-table/FormsTable.tsx +22 -42
  98. package/src/forms-page/forms-table/index.ts +1 -1
  99. package/src/forms-page/forms-table/styles.scss +4 -5
  100. package/src/forms-page/index.ts +1 -1
  101. package/src/forms-page/styles.scss +3 -5
  102. package/src/group-form-entry-workflow/GroupFormEntryWorkflow.tsx +9 -9
  103. package/src/group-form-entry-workflow/GroupSessionWorkspace.tsx +77 -117
  104. package/src/group-form-entry-workflow/SessionDetailsForm.tsx +73 -50
  105. package/src/group-form-entry-workflow/SessionMetaWorkspace.tsx +20 -28
  106. package/src/group-form-entry-workflow/attendance-table/AttendanceTable.tsx +15 -29
  107. package/src/group-form-entry-workflow/attendance-table/index.ts +1 -1
  108. package/src/group-form-entry-workflow/configurable-questions/ConfigurableQuestionsSection.tsx +45 -0
  109. package/src/group-form-entry-workflow/group-display-header/GroupDisplayHeader.test.tsx +5 -5
  110. package/src/group-form-entry-workflow/group-display-header/GroupDisplayHeader.tsx +13 -21
  111. package/src/group-form-entry-workflow/group-display-header/index.ts +1 -1
  112. package/src/group-form-entry-workflow/group-display-header/styles.scss +20 -20
  113. package/src/group-form-entry-workflow/group-search/CompactGroupResults.tsx +24 -35
  114. package/src/group-form-entry-workflow/group-search/CompactGroupSearch.tsx +13 -15
  115. package/src/group-form-entry-workflow/group-search/GroupSearch.tsx +22 -38
  116. package/src/group-form-entry-workflow/group-search/compact-group-result.scss +16 -17
  117. package/src/group-form-entry-workflow/group-search/compact-group-search.scss +7 -8
  118. package/src/group-form-entry-workflow/group-search/group-search.scss +20 -23
  119. package/src/group-form-entry-workflow/group-search-header/GroupSearchHeader.tsx +20 -21
  120. package/src/group-form-entry-workflow/group-search-header/index.ts +1 -1
  121. package/src/group-form-entry-workflow/group-search-header/styles.scss +8 -8
  122. package/src/group-form-entry-workflow/index.ts +1 -1
  123. package/src/group-form-entry-workflow/styles.scss +13 -16
  124. package/src/hooks/index.ts +7 -6
  125. package/src/hooks/useFormState.ts +3 -3
  126. package/src/hooks/useGetAllForms.ts +7 -15
  127. package/src/hooks/useGetEncounter.ts +3 -3
  128. package/src/hooks/useGetPatient.ts +2 -2
  129. package/src/hooks/useGetPatients.ts +4 -6
  130. package/src/hooks/useGetSystemSetting.ts +3 -5
  131. package/src/hooks/useKeyPress.ts +5 -5
  132. package/src/hooks/usePostEndpoint.ts +10 -10
  133. package/src/hooks/useSearchEndpoint.ts +23 -40
  134. package/src/hooks/useSpecificQuestions.ts +75 -0
  135. package/src/hooks/useStartVisit.ts +18 -28
  136. package/src/index.ts +12 -76
  137. package/src/patient-card/PatientCard.tsx +8 -20
  138. package/src/patient-card/index.ts +1 -1
  139. package/src/patient-card/styles.scss +2 -4
  140. package/src/routes.json +24 -0
  141. package/src/setup-tests.ts +1 -1
  142. package/src/types.ts +25 -0
  143. package/tools/i18next-parser.config.js +19 -19
  144. package/translations/am.json +75 -0
  145. package/translations/ar.json +75 -0
  146. package/translations/en.json +7 -1
  147. package/translations/es.json +75 -0
  148. package/translations/fr.json +33 -8
  149. package/translations/he.json +75 -0
  150. package/translations/km.json +75 -0
  151. package/tsconfig.json +2 -1
  152. package/turbo.json +18 -0
  153. package/webpack.config.js +1 -1
  154. package/dist/153.js +0 -1
  155. package/dist/229.js +0 -1
  156. package/dist/247.js +0 -1
  157. package/dist/255.js +0 -1
  158. package/dist/294.js +0 -2
  159. package/dist/32.js +0 -1
  160. package/dist/327.js +0 -1
  161. package/dist/571.js +0 -1
  162. package/dist/574.js +0 -1
  163. package/dist/617.js +0 -1
  164. package/dist/656.js +0 -2
  165. package/dist/658.js +0 -2
  166. package/dist/658.js.LICENSE.txt +0 -27
  167. package/dist/68.js +0 -2
  168. package/dist/74.js +0 -1
  169. package/dist/757.js +0 -1
  170. package/dist/776.js +0 -1
  171. package/dist/804.js +0 -1
  172. package/dist/820.js +0 -1
  173. package/dist/935.js +0 -2
  174. package/dist/openmrs-esm-fast-data-entry-app.old +0 -1
  175. package/src/declarations.d.tsx +0 -2
  176. /package/dist/{294.js.LICENSE.txt → 540.js.LICENSE.txt} +0 -0
  177. /package/dist/{656.js.LICENSE.txt → 626.js.LICENSE.txt} +0 -0
  178. /package/dist/{935.js.LICENSE.txt → 961.js.LICENSE.txt} +0 -0
package/src/index.ts CHANGED
@@ -1,91 +1,27 @@
1
- /**
2
- * This is the entrypoint file of the application. It communicates the
3
- * important features of this microfrontend to the app shell. It
4
- * connects the app shell to the React application(s) that make up this
5
- * microfrontend.
6
- */
1
+ import { getAsyncLifecycle, defineConfigSchema, registerBreadcrumbs } from '@openmrs/esm-framework';
2
+ import { configSchema } from './config-schema';
7
3
 
8
- import {
9
- getAsyncLifecycle,
10
- defineConfigSchema,
11
- registerBreadcrumbs,
12
- } from "@openmrs/esm-framework";
13
- import { configSchema } from "./config-schema";
4
+ const moduleName = '@openmrs/esm-fast-data-entry-app';
14
5
 
15
- declare let __VERSION__: string;
16
- // __VERSION__ is replaced by Webpack with the version from package.json
17
- const version = __VERSION__;
18
-
19
- /**
20
- * This tells the app shell how to obtain translation files: that they
21
- * are JSON files in the directory `../translations` (which you should
22
- * see in the directory structure).
23
- */
24
- const importTranslation = require.context(
25
- "../translations",
26
- false,
27
- /.json$/,
28
- "lazy"
29
- );
30
-
31
- /**
32
- * This tells the app shell what versions of what OpenMRS backend modules
33
- * are expected. Warnings will appear if suitable modules are not
34
- * installed. The keys are the part of the module name after
35
- * `openmrs-module-`; e.g., `openmrs-module-fhir2` becomes `fhir2`.
36
- */
37
- const backendDependencies = {
38
- fhir2: "^1.2.0",
39
- "webservices.rest": "^2.2.0",
6
+ const options = {
7
+ featureName: 'fast-data-entry-app',
8
+ moduleName,
40
9
  };
41
10
 
42
- /**
43
- * This function performs any setup that should happen at microfrontend
44
- * load-time (such as defining the config schema) and then returns an
45
- * object which describes how the React application(s) should be
46
- * rendered.
47
- *
48
- * In this example, our return object contains a single page definition.
49
- * It tells the app shell that the default export of `greeter.tsx`
50
- * should be rendered when the route matches `hello`. The full route
51
- * will be `openmrsSpaBase() + 'hello'`, which is usually
52
- * `/openmrs/spa/hello`.
53
- */
54
- function setupOpenMRS() {
55
- const moduleName = "@openmrs/esm-fast-data-entry-app";
11
+ export const importTranslation = require.context('../translations', false, /.json$/, 'lazy');
12
+
13
+ export const root = getAsyncLifecycle(() => import('./Root'), options);
56
14
 
57
- const options = {
58
- featureName: "fast-data-entry-app",
59
- moduleName,
60
- };
15
+ export const formsAppMenuLink = getAsyncLifecycle(() => import('./forms-app-menu-link'), options);
61
16
 
17
+ export function startupApp() {
62
18
  defineConfigSchema(moduleName, configSchema);
63
19
 
64
20
  registerBreadcrumbs([
65
21
  {
66
22
  path: `${window.spaBase}/forms`,
67
- title: "Forms",
23
+ title: 'Forms',
68
24
  parent: `${window.spaBase}/home`,
69
25
  },
70
26
  ]);
71
-
72
- return {
73
- pages: [
74
- {
75
- load: getAsyncLifecycle(() => import("./Root"), options),
76
- route: "forms",
77
- },
78
- ],
79
- extensions: [
80
- {
81
- name: "forms-app-link",
82
- slot: "app-menu-slot",
83
- load: getAsyncLifecycle(() => import("./forms-app-menu-link"), options),
84
- online: true,
85
- offline: true,
86
- },
87
- ],
88
- };
89
27
  }
90
-
91
- export { backendDependencies, importTranslation, setupOpenMRS, version };
@@ -1,8 +1,8 @@
1
- import { CheckmarkOutline, WarningAlt } from "@carbon/react/icons";
2
- import { SkeletonText } from "@carbon/react";
3
- import React from "react";
4
- import useGetPatient from "../hooks/useGetPatient";
5
- import styles from "./styles.scss";
1
+ import { CheckmarkOutline, WarningAlt } from '@carbon/react/icons';
2
+ import { SkeletonText } from '@carbon/react';
3
+ import React from 'react';
4
+ import useGetPatient from '../hooks/useGetPatient';
5
+ import styles from './styles.scss';
6
6
 
7
7
  const CardContainer = ({ onClick = () => undefined, active, children }) => {
8
8
  return (
@@ -17,12 +17,7 @@ const CardContainer = ({ onClick = () => undefined, active, children }) => {
17
17
  );
18
18
  };
19
19
 
20
- const PatientCard = ({
21
- patientUuid,
22
- activePatientUuid,
23
- editEncounter,
24
- encounters,
25
- }) => {
20
+ const PatientCard = ({ patientUuid, activePatientUuid, editEncounter, encounters }) => {
26
21
  const patient = useGetPatient(patientUuid);
27
22
  const givenName = patient?.name?.[0]?.given?.[0];
28
23
  const familyName = patient?.name?.[0]?.family;
@@ -39,17 +34,10 @@ const PatientCard = ({
39
34
  const active = activePatientUuid === patientUuid;
40
35
 
41
36
  return (
42
- <CardContainer
43
- onClick={active ? () => undefined : () => editEncounter(patientUuid)}
44
- active={active}
45
- >
37
+ <CardContainer onClick={active ? () => undefined : () => editEncounter(patientUuid)} active={active}>
46
38
  <div className={styles.patientInfo}>
47
39
  <div className={styles.identifier}>{identifier}</div>
48
- <div
49
- className={`${styles.displayName} ${
50
- active && styles.activeDisplayName
51
- }`}
52
- >
40
+ <div className={`${styles.displayName} ${active && styles.activeDisplayName}`}>
53
41
  {givenName} {familyName}
54
42
  </div>
55
43
  </div>
@@ -1,3 +1,3 @@
1
- import PatientCard from "./PatientCard";
1
+ import PatientCard from './PatientCard';
2
2
 
3
3
  export default PatientCard;
@@ -1,10 +1,8 @@
1
- @use '@carbon/styles/scss/spacing';
2
1
  @use '@carbon/colors';
3
- // @use '@carbon/styles/scss/type';
4
- // @import '~@openmrs/esm-styleguide/src/vars';
2
+ @use '@carbon/layout';
5
3
 
6
4
  .cardContainer {
7
- padding: spacing.$spacing-05;
5
+ padding: layout.$spacing-05;
8
6
  display: flex;
9
7
  cursor: pointer;
10
8
  }
@@ -0,0 +1,24 @@
1
+ {
2
+ "$schema": "https://json.openmrs.org/routes.schema.json",
3
+ "backendDependencies": {
4
+ "fhir2": ">=1.2",
5
+ "webservices.rest": "^2.2.0"
6
+ },
7
+ "pages": [
8
+ {
9
+ "component": "root",
10
+ "routeRegex": "forms",
11
+ "online": true,
12
+ "offline": true
13
+ }
14
+ ],
15
+ "extensions": [
16
+ {
17
+ "name": "forms-app-link",
18
+ "slot": "app-menu-slot",
19
+ "component": "formsAppMenuLink",
20
+ "online": true,
21
+ "offline": true
22
+ }
23
+ ]
24
+ }
@@ -1 +1 @@
1
- import "@testing-library/jest-dom/extend-expect";
1
+ import '@testing-library/jest-dom/extend-expect';
package/src/types.ts ADDED
@@ -0,0 +1,25 @@
1
+ export interface Concept {
2
+ uuid: string;
3
+ display: string;
4
+ }
5
+
6
+ export interface SpecificQuestion {
7
+ question: {
8
+ id: string;
9
+ display: string;
10
+ defaultAnswer?: string;
11
+ disabled?: boolean;
12
+ };
13
+ answers: Array<{
14
+ value: string;
15
+ display: string;
16
+ }>;
17
+ }
18
+
19
+ export interface SpecificQuestionConfig {
20
+ forms: Array<string>;
21
+ questionId: string;
22
+ answers?: Array<string>;
23
+ defaultAnswer?: string;
24
+ disabled?: boolean;
25
+ }
@@ -1,14 +1,14 @@
1
1
  module.exports = {
2
- contextSeparator: "_",
2
+ contextSeparator: '_',
3
3
  // Key separator used in your translation keys
4
4
 
5
5
  createOldCatalogs: false,
6
6
  // Save the \_old files
7
7
 
8
- defaultNamespace: "translations",
8
+ defaultNamespace: 'translations',
9
9
  // Default namespace used in your i18next config
10
10
 
11
- defaultValue: "",
11
+ defaultValue: '',
12
12
  // Default value to give to empty keys
13
13
  // You may also specify a function accepting the locale, namespace, and key as arguments
14
14
 
@@ -18,43 +18,43 @@ module.exports = {
18
18
  keepRemoved: false,
19
19
  // Keep keys from the catalog that are no longer in code
20
20
 
21
- keySeparator: ".",
21
+ keySeparator: '.',
22
22
  // Key separator used in your translation keys
23
23
  // If you want to use plain english keys, separators such as `.` and `:` will conflict. You might want to set `keySeparator: false` and `namespaceSeparator: false`. That way, `t('Status: Loading...')` will not think that there are a namespace and three separator dots for instance.
24
24
 
25
25
  // see below for more details
26
26
  lexers: {
27
- hbs: ["HandlebarsLexer"],
28
- handlebars: ["HandlebarsLexer"],
27
+ hbs: ['HandlebarsLexer'],
28
+ handlebars: ['HandlebarsLexer'],
29
29
 
30
- htm: ["HTMLLexer"],
31
- html: ["HTMLLexer"],
30
+ htm: ['HTMLLexer'],
31
+ html: ['HTMLLexer'],
32
32
 
33
- mjs: ["JavascriptLexer"],
34
- js: ["JavascriptLexer"], // if you're writing jsx inside .js files, change this to JsxLexer
35
- ts: ["JavascriptLexer"],
36
- jsx: ["JsxLexer"],
37
- tsx: ["JsxLexer"],
33
+ mjs: ['JavascriptLexer'],
34
+ js: ['JavascriptLexer'], // if you're writing jsx inside .js files, change this to JsxLexer
35
+ ts: ['JavascriptLexer'],
36
+ jsx: ['JsxLexer'],
37
+ tsx: ['JsxLexer'],
38
38
 
39
- default: ["JavascriptLexer"],
39
+ default: ['JavascriptLexer'],
40
40
  },
41
41
 
42
- lineEnding: "lf",
42
+ lineEnding: 'lf',
43
43
  // Control the line ending. See options at https://github.com/ryanve/eol
44
44
 
45
- locales: ["en"],
45
+ locales: ['en', 'am', 'es', 'fr', 'km', 'he', 'ar'],
46
46
  // An array of the locales in your applications
47
47
 
48
- namespaceSeparator: ":",
48
+ namespaceSeparator: ':',
49
49
  // Namespace separator used in your translation keys
50
50
  // If you want to use plain english keys, separators such as `.` and `:` will conflict. You might want to set `keySeparator: false` and `namespaceSeparator: false`. That way, `t('Status: Loading...')` will not think that there are a namespace and three separator dots for instance.
51
51
 
52
- output: "$NAMESPACE/$LOCALE.json",
52
+ output: '$NAMESPACE/$LOCALE.json',
53
53
  // Supports $LOCALE and $NAMESPACE injection
54
54
  // Supports JSON (.json) and YAML (.yml) file formats
55
55
  // Where to write the locale files relative to process.cwd()
56
56
 
57
- pluralSeparator: "_",
57
+ pluralSeparator: '_',
58
58
  // Plural separator used in your translation keys
59
59
  // If you want to use plain english keys, separators such as `_` might conflict. You might want to set `pluralSeparator` to a different string that does not occur in your keys.
60
60
 
@@ -0,0 +1,75 @@
1
+ {
2
+ "actions": "Actions",
3
+ "allFieldsRequired": "All fields are required unless marked optional",
4
+ "allForms": "All Forms",
5
+ "areYouSure": "Are you sure?",
6
+ "cancel": "Cancel",
7
+ "cancelExplanation": "You will lose any unsaved changes on the current form. Do you want to discard the current session?",
8
+ "changeGroup": "Choose a different group",
9
+ "chooseGroupError": "Please choose a group.",
10
+ "clearSearch": "Clear",
11
+ "complete": "Complete",
12
+ "createGroup": "Create Group",
13
+ "createNewGroup": "Create New Group",
14
+ "createNewPatient": "Create new patient",
15
+ "createNewSession": "Create New Session",
16
+ "discard": "Discard",
17
+ "editGroup": "Edit Group",
18
+ "error": "Error",
19
+ "errorCopy": "Sorry, there was an error. You can try to reload this page, or contact the site administrator and quote the error code above.",
20
+ "errorLoadingData": "Error Loading Data",
21
+ "fastDataEntry": "Fast Data Entry",
22
+ "fillForm": "Fill Form",
23
+ "findGroup": "Find group",
24
+ "formName": "Form Name",
25
+ "formsAppMenuLink": "Fast Data Entry",
26
+ "formsFilled": "Forms filled",
27
+ "goToForm": "Go To Form",
28
+ "groupNameError": "Please enter a group name.",
29
+ "identifier": "Patient ID",
30
+ "markAbsentPatients": "The patients in this group. Patients that are not present in the session should be marked as absent.",
31
+ "members": "members",
32
+ "name": "Name",
33
+ "newGroupName": "New Group Name",
34
+ "newGroupSession": "New Group Session",
35
+ "nextPatient": "Next patient",
36
+ "noFormsFound": "No Forms To Show",
37
+ "noFormsFoundMessage": "No forms could be found for this category. Please double check the form concept uuids and access permissions.",
38
+ "noGroupsFoundMessage": "Sorry, no groups have been found",
39
+ "noMoreResults": "End of search results",
40
+ "noPatientError": "Please enter at least one patient.",
41
+ "or": "or",
42
+ "orLabelName": "OR label name",
43
+ "patientIsPresent": "Patient is present",
44
+ "patientsInGroup": "Patients in group",
45
+ "postError": "POST Error",
46
+ "practitionerName": "Practitioner Name",
47
+ "remove": "Remove",
48
+ "requiredField": "This field is required",
49
+ "resumeGroupSession": "Resume Group Session",
50
+ "resumeSession": "Resume Session",
51
+ "review": "Review",
52
+ "save": "Save",
53
+ "save&close": "Save & Close",
54
+ "saveAndComplete": "Save & Complete",
55
+ "saveExplanation": "Do you want to save the current form and exit the workflow?",
56
+ "saveForm": "Save Form",
57
+ "saveSession": "Save Session",
58
+ "search": "Search",
59
+ "searchForGroup": "Search for a group by name",
60
+ "searchForPatientsToAddToGroup": "Search for patients to add to group",
61
+ "searchResultsText": "search result(s)",
62
+ "selectGroupFirst": "Please select a group first",
63
+ "selectPatientFirst": "Please select a patient first",
64
+ "sessionDate": "Session Date",
65
+ "sessionDetails": "1. Session details",
66
+ "sessionName": "Session Name",
67
+ "sessionNotes": "Session Notes",
68
+ "sessionParticipants": "2. Session participants",
69
+ "sessionSpecificDetails": "3. Specific details",
70
+ "sessionSpecificDetailsDescription": "They will be mapped to form responses for all patients as pre-filled data.",
71
+ "startGroupSession": "Start Group Session",
72
+ "trySearchWithPatientUniqueID": "Try searching with the cohort's description",
73
+ "unknown": "Unknown",
74
+ "unknownPostError": "An unknown error occurred while saving data"
75
+ }
@@ -0,0 +1,75 @@
1
+ {
2
+ "actions": "الإجراءات",
3
+ "allFieldsRequired": "جميع الحقول مطلوبة ما لم يتم التأشير عليها بأنها اختيارية",
4
+ "allForms": "جميع النماذج",
5
+ "areYouSure": "هل أنت متأكد؟",
6
+ "cancel": "إلغاء",
7
+ "cancelExplanation": "سوف تفقد أي تغييرات لم يتم حفظها في النموذج الحالي. هل ترغب في التخلص من الجلسة الحالية؟",
8
+ "changeGroup": "اختر مجموعة مختلفة",
9
+ "chooseGroupError": "الرجاء اختيار مجموعة.",
10
+ "clearSearch": "مسح",
11
+ "complete": "اكتمال",
12
+ "createGroup": "إنشاء مجموعة",
13
+ "createNewGroup": "إنشاء مجموعة جديدة",
14
+ "createNewPatient": "إنشاء مريض جديد",
15
+ "createNewSession": "إنشاء جلسة جديدة",
16
+ "discard": "تجاهل",
17
+ "editGroup": "تعديل المجموعة",
18
+ "error": "خطأ",
19
+ "errorCopy": "عذرًا، حدث خطأ. يمكنك محاولة إعادة تحميل هذه الصفحة، أو الاتصال بمسؤول الموقع واقتباس رمز الخطأ أعلاه.",
20
+ "errorLoadingData": "خطأ في تحميل البيانات",
21
+ "fastDataEntry": "إدخال البيانات السريع",
22
+ "fillForm": "املأ النموذج",
23
+ "findGroup": "ابحث عن مجموعة",
24
+ "formName": "اسم النموذج",
25
+ "formsAppMenuLink": "إدخال البيانات السريع",
26
+ "formsFilled": "النماذج المملوءة",
27
+ "goToForm": "اذهب إلى النموذج",
28
+ "groupNameError": "الرجاء إدخال اسم المجموعة.",
29
+ "identifier": "هوية المريض",
30
+ "markAbsentPatients": "المرضى في هذه المجموعة. يجب وضع علامة على المرضى الذين ليسوا موجودين في الجلسة كغائبين.",
31
+ "members": "أعضاء",
32
+ "name": "الاسم",
33
+ "newGroupName": "اسم المجموعة الجديد",
34
+ "newGroupSession": "جلسة المجموعة الجديدة",
35
+ "nextPatient": "المريض التالي",
36
+ "noFormsFound": "لا توجد نماذج للعرض",
37
+ "noFormsFoundMessage": "لم يتم العثور على نماذج لهذه الفئة. يرجى التحقق مرة أخرى من uuids مفهوم النموذج وأذونات الوصول.",
38
+ "noGroupsFoundMessage": "عذرًا، لم يتم العثور على مجموعات",
39
+ "noMoreResults": "نهاية نتائج البحث",
40
+ "noPatientError": "الرجاء إدخال مريض واحد على الأقل.",
41
+ "or": "أو",
42
+ "orLabelName": "أو اسم العلامة",
43
+ "patientIsPresent": "المريض موجود",
44
+ "patientsInGroup": "المرضى في المجموعة",
45
+ "postError": "خطأ POST",
46
+ "practitionerName": "اسم الممارس",
47
+ "remove": "إزالة",
48
+ "requiredField": "This field is required",
49
+ "resumeGroupSession": "استئناف جلسة المجموعة",
50
+ "resumeSession": "استئناف الجلسة",
51
+ "review": "Review",
52
+ "save": "حفظ",
53
+ "save&close": "Save & Close",
54
+ "saveAndComplete": "حفظ واكتمال",
55
+ "saveExplanation": "هل ترغب في حفظ النموذج الحالي والخروج من العملية؟",
56
+ "saveForm": "حفظ النموذج",
57
+ "saveSession": "حفظ الجلسة",
58
+ "search": "بحث",
59
+ "searchForGroup": "ابحث عن مجموعة بالاسم",
60
+ "searchForPatientsToAddToGroup": "Search for patients to add to group",
61
+ "searchResultsText": "نتيجة (نتائج) البحث",
62
+ "selectGroupFirst": "الرجاء اختيار مجموعة أولاً",
63
+ "selectPatientFirst": "الرجاء اختيار مريض أولاً",
64
+ "sessionDate": "تاريخ الجلسة",
65
+ "sessionDetails": "1. تفاصيل الجلسة",
66
+ "sessionName": "اسم الجلسة",
67
+ "sessionNotes": "ملاحظات الجلسة",
68
+ "sessionParticipants": "2. المشاركون في الجلسة",
69
+ "sessionSpecificDetails": "3. Specific details",
70
+ "sessionSpecificDetailsDescription": "They will be mapped to form responses for all patients as pre-filled data.",
71
+ "startGroupSession": "بدء جلسة المجموعة",
72
+ "trySearchWithPatientUniqueID": "حاول البحث باستخدام وصف الفوج",
73
+ "unknown": "غير معروف",
74
+ "unknownPostError": "حدث خطأ غير معروف أثناء حفظ البيانات"
75
+ }
@@ -32,7 +32,7 @@
32
32
  "name": "Name",
33
33
  "newGroupName": "New Group Name",
34
34
  "newGroupSession": "New Group Session",
35
- "nextPatient": "Next Patient",
35
+ "nextPatient": "Next patient",
36
36
  "noFormsFound": "No Forms To Show",
37
37
  "noFormsFoundMessage": "No forms could be found for this category. Please double check the form concept uuids and access permissions.",
38
38
  "noGroupsFoundMessage": "Sorry, no groups have been found",
@@ -45,15 +45,19 @@
45
45
  "postError": "POST Error",
46
46
  "practitionerName": "Practitioner Name",
47
47
  "remove": "Remove",
48
+ "requiredField": "This field is required",
48
49
  "resumeGroupSession": "Resume Group Session",
49
50
  "resumeSession": "Resume Session",
51
+ "review": "Review",
50
52
  "save": "Save",
53
+ "save&close": "Save & Close",
51
54
  "saveAndComplete": "Save & Complete",
52
55
  "saveExplanation": "Do you want to save the current form and exit the workflow?",
53
56
  "saveForm": "Save Form",
54
57
  "saveSession": "Save Session",
55
58
  "search": "Search",
56
59
  "searchForGroup": "Search for a group by name",
60
+ "searchForPatientsToAddToGroup": "Search for patients to add to group",
57
61
  "searchResultsText": "search result(s)",
58
62
  "selectGroupFirst": "Please select a group first",
59
63
  "selectPatientFirst": "Please select a patient first",
@@ -62,6 +66,8 @@
62
66
  "sessionName": "Session Name",
63
67
  "sessionNotes": "Session Notes",
64
68
  "sessionParticipants": "2. Session participants",
69
+ "sessionSpecificDetails": "3. Specific details",
70
+ "sessionSpecificDetailsDescription": "They will be mapped to form responses for all patients as pre-filled data.",
65
71
  "startGroupSession": "Start Group Session",
66
72
  "trySearchWithPatientUniqueID": "Try searching with the cohort's description",
67
73
  "unknown": "Unknown",
@@ -0,0 +1,75 @@
1
+ {
2
+ "actions": "Acciones",
3
+ "allFieldsRequired": "Todos los campos son obligatorios a menos que estén marcados como opcionales",
4
+ "allForms": "Todas las Formas",
5
+ "areYouSure": "¿Estás seguro?",
6
+ "cancel": "Cancelar",
7
+ "cancelExplanation": "Perderás los cambios no guardados en el formulario actual. ¿Deseas descartar la sesión actual?",
8
+ "changeGroup": "Elegir un grupo diferente",
9
+ "chooseGroupError": "Por favor, elige un grupo.",
10
+ "clearSearch": "Limpiar",
11
+ "complete": "Completar",
12
+ "createGroup": "Crear Grupo",
13
+ "createNewGroup": "Crear Nuevo Grupo",
14
+ "createNewPatient": "Crear nuevo paciente",
15
+ "createNewSession": "Crear Nueva Sesión",
16
+ "discard": "Descartar",
17
+ "editGroup": "Editar Grupo",
18
+ "error": "Error",
19
+ "errorCopy": "Lo siento, ocurrió un error. Puedes intentar recargar esta página o contactar al administrador del sitio e indicar el código de error de arriba.",
20
+ "errorLoadingData": "Error Cargando Datos",
21
+ "fastDataEntry": "Entrada Rápida de Datos",
22
+ "fillForm": "Completar Formulario",
23
+ "findGroup": "Buscar grupo",
24
+ "formName": "Nombre del Formulario",
25
+ "formsAppMenuLink": "Entrada Rápida de Datos",
26
+ "formsFilled": "Formularios completados",
27
+ "goToForm": "Ir al Formulario",
28
+ "groupNameError": "Por favor, ingresa un nombre de grupo.",
29
+ "identifier": "ID del Paciente",
30
+ "markAbsentPatients": "Los pacientes en este grupo. Los pacientes que no estén presentes en la sesión deben ser marcados como ausentes.",
31
+ "members": "miembros",
32
+ "name": "Nombre",
33
+ "newGroupName": "Nuevo Nombre de Grupo",
34
+ "newGroupSession": "Nueva Sesión de Grupo",
35
+ "nextPatient": "Siguiente Paciente",
36
+ "noFormsFound": "No se encontraron Formularios",
37
+ "noFormsFoundMessage": "No se pudieron encontrar formularios para esta categoría. Por favor, verifica los UUID de concepto del formulario y los permisos de acceso.",
38
+ "noGroupsFoundMessage": "Lo siento, no se encontraron grupos.",
39
+ "noMoreResults": "Fin de resultados de búsqueda",
40
+ "noPatientError": "Por favor, ingresa al menos un paciente.",
41
+ "or": "o",
42
+ "orLabelName": "Nombre de Etiqueta OR",
43
+ "patientIsPresent": "Paciente está presente",
44
+ "patientsInGroup": "Pacientes en el grupo",
45
+ "postError": "Error de POST",
46
+ "practitionerName": "Nombre del Practicante",
47
+ "remove": "Eliminar",
48
+ "requiredField": "Este campo es obligatorio",
49
+ "resumeGroupSession": "Continuar Sesión de Grupo",
50
+ "resumeSession": "Continuar Sesión",
51
+ "review": "Revisión",
52
+ "save": "Guardar",
53
+ "save&close": "Guardar y Cerrar",
54
+ "saveAndComplete": "Guardar y Completar",
55
+ "saveExplanation": "¿Deseas guardar el formulario actual y salir del flujo de trabajo?",
56
+ "saveForm": "Guardar Formulario",
57
+ "saveSession": "Guardar Sesión",
58
+ "search": "Buscar",
59
+ "searchForGroup": "Buscar un grupo por nombre",
60
+ "searchForPatientsToAddToGroup": "Buscar pacientes para añadir al grupo",
61
+ "searchResultsText": "resultado(s) de búsqueda",
62
+ "selectGroupFirst": "Por favor, selecciona primero un grupo.",
63
+ "selectPatientFirst": "Por favor, selecciona primero un paciente.",
64
+ "sessionDate": "Fecha de Sesión",
65
+ "sessionDetails": "1. Detalles de la Sesión",
66
+ "sessionName": "Nombre de la Sesión",
67
+ "sessionNotes": "Notas de la Sesión",
68
+ "sessionParticipants": "2. Participantes de la Sesión",
69
+ "sessionSpecificDetails": "3. Detalles específicos",
70
+ "sessionSpecificDetailsDescription": "Se asignarán a las respuestas de los formularios de todos los pacientes como datos precumplimentados.",
71
+ "startGroupSession": "Iniciar Sesión de Grupo",
72
+ "trySearchWithPatientUniqueID": "Intente buscar con la descripción del grupo",
73
+ "unknown": "Desconocido",
74
+ "unknownPostError": "Ocurrió un error desconocido al guardar los datos"
75
+ }