@pih/esm-referrals-queue-app 1.0.5 → 2.0.0-pre.9
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.
- package/.editorconfig +2 -1
- package/.eslintignore +2 -1
- package/.eslintrc +1 -2
- package/.github/workflows/node.js.yml +17 -17
- package/.husky/pre-commit +6 -0
- package/.husky/pre-push +6 -0
- package/.prettierignore +13 -3
- package/README.md +14 -3
- package/__mocks__/react-i18next.js +51 -0
- package/dist/132.js +1 -0
- package/dist/147.js +2 -0
- package/dist/147.js.LICENSE.txt +47 -0
- package/dist/281.js +1 -0
- package/dist/294.js +2 -0
- package/dist/294.js.LICENSE.txt +9 -0
- package/dist/574.js +1 -0
- package/dist/595.js +2 -0
- package/dist/595.js.LICENSE.txt +1 -0
- package/dist/879.js +2 -0
- package/dist/879.js.LICENSE.txt +21 -0
- package/dist/90.js +1 -0
- package/dist/main.js +1 -0
- package/dist/pih-esm-referrals-queue-app.js +1 -2
- package/dist/pih-esm-referrals-queue-app.js.buildmanifest.json +265 -0
- package/dist/pih-esm-referrals-queue-app.old +1 -0
- package/jest.config.json +19 -0
- package/package.json +68 -78
- package/src/config-schema.ts +63 -0
- package/src/constants.ts +3 -0
- package/src/declarations.d.tsx +1 -2
- package/src/index.ts +57 -53
- package/src/referrals-queue/referrals-queue.component.tsx +22 -17
- package/src/referrals-queue/{referrals-queue.resource.ts → referrals-queue.resource.tsx} +1 -1
- package/src/referrals-queue/referrals-queue.test.tsx +13 -12
- package/src/root.component.test.tsx +1 -1
- package/src/root.component.tsx +8 -5
- package/src/setup-tests.ts +24 -0
- package/src/table/table.component.tsx +5 -4
- package/src/util.ts +1 -3
- package/translations/en.json +2 -11
- package/tsconfig.json +3 -2
- package/webpack.config.js +1 -71
- package/.babelrc +0 -10
- package/.gitattributes +0 -1
- package/.tx/config +0 -10
- package/.vscode/launch.json +0 -35
- package/__mocks__/openmrs-esm-framework.mock.tsx +0 -64
- package/design-mockup.png +0 -0
- package/dist/1.pih-esm-referrals-queue-app.js +0 -297
- package/dist/1.pih-esm-referrals-queue-app.js.map +0 -1
- package/dist/2.pih-esm-referrals-queue-app.js +0 -2
- package/dist/2.pih-esm-referrals-queue-app.js.map +0 -1
- package/dist/3.pih-esm-referrals-queue-app.js +0 -2
- package/dist/3.pih-esm-referrals-queue-app.js.map +0 -1
- package/dist/4.pih-esm-referrals-queue-app.js +0 -2
- package/dist/4.pih-esm-referrals-queue-app.js.map +0 -1
- package/dist/5.pih-esm-referrals-queue-app.js +0 -2
- package/dist/5.pih-esm-referrals-queue-app.js.map +0 -1
- package/dist/pih-esm-referrals-queue-app.js.map +0 -1
- package/jest.config.js +0 -11
- package/src/set-public-path.ts +0 -3
- package/src/setup-tests.js +0 -13
- package/translations/es.json +0 -13
- package/translations/fr.json +0 -13
package/package.json
CHANGED
|
@@ -1,110 +1,100 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pih/esm-referrals-queue-app",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "A page for viewing the J9 Home Visits from CommCare",
|
|
5
|
-
"main": "dist/pih-esm-referrals-queue-app.js",
|
|
6
|
-
"types": "src/pih-esm-referrals-queue.d.tsx",
|
|
3
|
+
"version": "2.0.0-pre.9",
|
|
7
4
|
"license": "MPL-2.0",
|
|
8
|
-
"
|
|
5
|
+
"description": "A page for viewing the J9 Home Visits from CommCare",
|
|
6
|
+
"browser": "dist/pih-esm-referrals-queue-app.js",
|
|
7
|
+
"main": "src/index.ts",
|
|
8
|
+
"source": true,
|
|
9
9
|
"scripts": {
|
|
10
|
-
"start": "openmrs
|
|
11
|
-
"serve": "webpack
|
|
10
|
+
"start": "openmrs develop",
|
|
11
|
+
"serve": "webpack serve --mode=development",
|
|
12
12
|
"build": "webpack --mode production",
|
|
13
13
|
"analyze": "webpack --mode=production --env.analyze=true",
|
|
14
|
-
"lint": "eslint src --ext tsx",
|
|
15
|
-
"prettier": "prettier
|
|
14
|
+
"lint": "eslint src --ext js,jsx,ts,tsx",
|
|
15
|
+
"prettier": "prettier --write \"src/**/*.{ts,tsx}\"",
|
|
16
16
|
"typescript": "tsc",
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"coverage": "
|
|
20
|
-
"
|
|
17
|
+
"test": "jest --config jest.config.json",
|
|
18
|
+
"verify": "concurrently 'yarn:lint' 'yarn:test' 'yarn:typescript'",
|
|
19
|
+
"coverage": "yarn test -- --coverage",
|
|
20
|
+
"prepare": "husky install"
|
|
21
|
+
},
|
|
22
|
+
"husky": {
|
|
23
|
+
"hooks": {
|
|
24
|
+
"pre-commit": "pretty-quick --staged && yarn verify"
|
|
25
|
+
}
|
|
21
26
|
},
|
|
22
27
|
"browserslist": [
|
|
23
28
|
"extends browserslist-config-openmrs"
|
|
24
29
|
],
|
|
25
30
|
"keywords": [
|
|
26
|
-
"openmrs"
|
|
31
|
+
"openmrs",
|
|
32
|
+
"microfrontends"
|
|
27
33
|
],
|
|
28
|
-
"publishConfig": {
|
|
29
|
-
"access": "public"
|
|
30
|
-
},
|
|
31
|
-
"husky": {
|
|
32
|
-
"hooks": {
|
|
33
|
-
"pre-commit": "pretty-quick --staged && concurrently 'npm:lint' 'npm:test' 'npm:typescript' 'npm:update-translations' && git add translations/*.json"
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
34
|
"repository": {
|
|
37
35
|
"type": "git",
|
|
38
|
-
"url": "git+https://github.com/pih/esm-referrals-queue.git"
|
|
36
|
+
"url": "git+https://github.com/pih/pih-esm-referrals-queue.git"
|
|
37
|
+
},
|
|
38
|
+
"homepage": "https://github.com/pih/pih-esm-referrals-queue#readme",
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public"
|
|
39
41
|
},
|
|
40
42
|
"bugs": {
|
|
41
|
-
"url": "https://github.com/pih/esm-referrals-queue/issues"
|
|
43
|
+
"url": "https://github.com/pih/pih-esm-referrals-queue/issues"
|
|
42
44
|
},
|
|
43
45
|
"dependencies": {
|
|
44
|
-
"
|
|
46
|
+
"lodash-es": "^4.17.15"
|
|
45
47
|
},
|
|
46
48
|
"peerDependencies": {
|
|
47
|
-
"@
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"react
|
|
51
|
-
"react-i18next": "
|
|
49
|
+
"@carbon/react": "^1.9.0",
|
|
50
|
+
"@openmrs/esm-framework": "next",
|
|
51
|
+
"dayjs": "1.x",
|
|
52
|
+
"react": "18.x",
|
|
53
|
+
"react-i18next": "11.x",
|
|
54
|
+
"react-router-dom": "6.x",
|
|
55
|
+
"rxjs": "6.x"
|
|
52
56
|
},
|
|
53
57
|
"devDependencies": {
|
|
54
|
-
"@
|
|
55
|
-
"@
|
|
56
|
-
"@babel/plugin-transform-runtime": "^7.9.0",
|
|
57
|
-
"@babel/preset-env": "^7.8.4",
|
|
58
|
-
"@babel/preset-react": "^7.8.3",
|
|
59
|
-
"@babel/preset-typescript": "^7.8.3",
|
|
58
|
+
"@carbon/react": "^1.9.0",
|
|
59
|
+
"@carbon/icons-react": "^10.18.0",
|
|
60
60
|
"@openmrs/esm-framework": "next",
|
|
61
|
-
"@
|
|
62
|
-
"@
|
|
63
|
-
"@
|
|
64
|
-
"@
|
|
65
|
-
"@
|
|
66
|
-
"@
|
|
67
|
-
"@types/
|
|
68
|
-
"@types/
|
|
69
|
-
"@types/
|
|
70
|
-
"@
|
|
71
|
-
"
|
|
72
|
-
"
|
|
73
|
-
"
|
|
74
|
-
"
|
|
75
|
-
"
|
|
76
|
-
"
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"eslint": "^
|
|
80
|
-
"eslint-
|
|
81
|
-
"
|
|
82
|
-
"eslint-plugin-prettier": "^3.1.1",
|
|
83
|
-
"fork-ts-checker-webpack-plugin": "^1.6.0",
|
|
84
|
-
"husky": "^3.0.9",
|
|
85
|
-
"i18next": "^19.1.0",
|
|
61
|
+
"@swc/core": "^1.2.203",
|
|
62
|
+
"@swc/jest": "^0.2.21",
|
|
63
|
+
"@testing-library/dom": "^7.20.0",
|
|
64
|
+
"@testing-library/jest-dom": "^5.16.5",
|
|
65
|
+
"@testing-library/react": "^13.3.0",
|
|
66
|
+
"@testing-library/user-event": "^14.4.3",
|
|
67
|
+
"@types/jest": "^28.1.4",
|
|
68
|
+
"@types/react": "^18.0.14",
|
|
69
|
+
"@types/react-dates": "^21.8.0",
|
|
70
|
+
"@types/react-dom": "^18.0.5",
|
|
71
|
+
"@types/react-router": "^5.1.14",
|
|
72
|
+
"@types/react-router-dom": "^5.1.7",
|
|
73
|
+
"@types/webpack-env": "^1.16.0",
|
|
74
|
+
"@typescript-eslint/parser": "^5.28.0",
|
|
75
|
+
"concurrently": "^6.2.0",
|
|
76
|
+
"css-loader": "^6.7.1",
|
|
77
|
+
"eslint": "^7.27.0",
|
|
78
|
+
"eslint-config-prettier": "^8.3.0",
|
|
79
|
+
"eslint-config-ts-react-important-stuff": "^3.0.0",
|
|
80
|
+
"eslint-plugin-prettier": "^3.4.0",
|
|
81
|
+
"husky": "^6.0.0",
|
|
86
82
|
"identity-obj-proxy": "^3.0.0",
|
|
87
|
-
"jest": "^
|
|
88
|
-
"
|
|
89
|
-
"mockdate": "^
|
|
90
|
-
"moment": "^2.24.0",
|
|
83
|
+
"jest": "^27.0.4",
|
|
84
|
+
"jest-cli": "^27.0.4",
|
|
85
|
+
"mockdate": "^3.0.5",
|
|
91
86
|
"openmrs": "next",
|
|
92
|
-
"prettier": "^
|
|
93
|
-
"pretty-quick": "^1.
|
|
87
|
+
"prettier": "^2.3.0",
|
|
88
|
+
"pretty-quick": "^3.1.0",
|
|
89
|
+
"react": "^18.2.0",
|
|
94
90
|
"react-dates": "^21.8.0",
|
|
95
|
-
"react-
|
|
96
|
-
"react-
|
|
97
|
-
"react-router-dom": "^
|
|
91
|
+
"react-dom": "^18.2.0",
|
|
92
|
+
"react-i18next": "^11.7.0",
|
|
93
|
+
"react-router-dom": "^6.3.0",
|
|
98
94
|
"rxjs": "^6.5.4",
|
|
99
|
-
"
|
|
100
|
-
"typescript": "^3.7.5",
|
|
101
|
-
"webpack": "^4.41.5",
|
|
102
|
-
"webpack-cli": "^3.3.10",
|
|
103
|
-
"webpack-config-single-spa-react": "^1.3.0",
|
|
104
|
-
"webpack-dev-server": "^3.10.1",
|
|
105
|
-
"webpack-merge": "^4.2.2"
|
|
95
|
+
"typescript": "^4.3.2"
|
|
106
96
|
},
|
|
107
97
|
"resolutions": {
|
|
108
|
-
"
|
|
98
|
+
"**/@types/react": "^18.0.14"
|
|
109
99
|
}
|
|
110
100
|
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Type, validators } from "@openmrs/esm-framework";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* This is the config schema. It expects a configuration object which
|
|
5
|
+
* looks like this:
|
|
6
|
+
*
|
|
7
|
+
* ```json
|
|
8
|
+
* { "casualGreeting": true, "whoToGreet": ["Mom"] }
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* In OpenMRS Microfrontends, all config parameters are optional. Thus,
|
|
12
|
+
* all elements must have a reasonable default. A good default is one
|
|
13
|
+
* that works well with the reference application.
|
|
14
|
+
*
|
|
15
|
+
* To understand the schema below, please read the configuration system
|
|
16
|
+
* documentation:
|
|
17
|
+
* https://openmrs.github.io/openmrs-esm-core/#/main/config
|
|
18
|
+
* Note especially the section "How do I make my module configurable?"
|
|
19
|
+
* https://openmrs.github.io/openmrs-esm-core/#/main/config?id=im-developing-an-esm-module-how-do-i-make-it-configurable
|
|
20
|
+
* and the Schema Reference
|
|
21
|
+
* https://openmrs.github.io/openmrs-esm-core/#/main/config?id=schema-reference
|
|
22
|
+
*/
|
|
23
|
+
export const configSchema = {
|
|
24
|
+
links: {
|
|
25
|
+
patientDash: {
|
|
26
|
+
_type: Type.String,
|
|
27
|
+
_default:
|
|
28
|
+
"${openmrsBase}/coreapps/clinicianfacing/patient.page?patientId=${patientUuid}&app=pih.app.clinicianDashboard",
|
|
29
|
+
_validators: [validators.isUrlWithTemplateParameters(["patientUuid"])],
|
|
30
|
+
},
|
|
31
|
+
visitPage: {
|
|
32
|
+
_type: Type.String,
|
|
33
|
+
_default:
|
|
34
|
+
"${openmrsBase}/pihcore/visit/visit.page?patient=${patientUuid}&visit=${visitUuid}&suppressActions=true#/overview",
|
|
35
|
+
_validators: [
|
|
36
|
+
validators.isUrlWithTemplateParameters(["patientUuid", "visitUuid"]),
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
homeVisitForm: {
|
|
40
|
+
_type: Type.String,
|
|
41
|
+
_default:
|
|
42
|
+
"${openmrsBase}/htmlformentryui/htmlform/editHtmlFormWithStandardUi.page?patientId=${patientUuid}&visitId=${visitUuid}&encounterId=${encounterUuid}&definitionUiResource=file:configuration/pih/htmlforms/section-mch-referral.xml&returnUrl=/mirebalais/spa/referrals-queue",
|
|
43
|
+
_validators: [
|
|
44
|
+
validators.isUrlWithTemplateParameters([
|
|
45
|
+
"patientUuid",
|
|
46
|
+
"visitUuid",
|
|
47
|
+
"encounterUuid",
|
|
48
|
+
]),
|
|
49
|
+
],
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
pendingStatuses: {
|
|
53
|
+
_type: Type.Array,
|
|
54
|
+
_default: ["Pending status", "Referral unmet"],
|
|
55
|
+
_elements: {
|
|
56
|
+
_type: Type.String,
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
export type Config = {
|
|
62
|
+
// TODO
|
|
63
|
+
};
|
package/src/constants.ts
ADDED
package/src/declarations.d.tsx
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
// This entire file will be deleted once we have typescript definitions
|
|
2
|
-
// for @openmrs/esm-api published to npm
|
|
3
1
|
declare type Observable<T> = import("rxjs").Observable<T>;
|
|
4
2
|
|
|
5
3
|
declare module "*.css";
|
|
4
|
+
declare module "*.scss";
|
|
6
5
|
|
|
7
6
|
type Referral = {
|
|
8
7
|
details: string;
|
package/src/index.ts
CHANGED
|
@@ -1,14 +1,32 @@
|
|
|
1
|
-
|
|
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
|
+
*/
|
|
7
|
+
|
|
2
8
|
import {
|
|
9
|
+
getAsyncLifecycle,
|
|
3
10
|
defineConfigSchema,
|
|
4
|
-
Type,
|
|
5
|
-
validators,
|
|
6
11
|
registerBreadcrumbs,
|
|
7
|
-
getAsyncLifecycle
|
|
8
12
|
} from "@openmrs/esm-framework";
|
|
13
|
+
import { configSchema } from "./config-schema";
|
|
9
14
|
|
|
10
|
-
|
|
15
|
+
/**
|
|
16
|
+
* This tells the app shell the version of this app. We inject this variable
|
|
17
|
+
* via the Webpack DefinePlugin, so first, in order to keep TypeScript happy,
|
|
18
|
+
* we need to tell it that this is an available variable in this scope. At
|
|
19
|
+
* build-time the __VERSION__ variable is replaced with the version from
|
|
20
|
+
* package.json
|
|
21
|
+
*/
|
|
22
|
+
declare var __VERSION__: string;
|
|
23
|
+
const version = __VERSION__;
|
|
11
24
|
|
|
25
|
+
/**
|
|
26
|
+
* This tells the app shell how to obtain translation files: that they
|
|
27
|
+
* are JSON files in the directory `../translations` (which you should
|
|
28
|
+
* see in the directory structure).
|
|
29
|
+
*/
|
|
12
30
|
const importTranslation = require.context(
|
|
13
31
|
"../translations",
|
|
14
32
|
false,
|
|
@@ -16,64 +34,50 @@ const importTranslation = require.context(
|
|
|
16
34
|
"lazy"
|
|
17
35
|
);
|
|
18
36
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
_validators: [validators.isUrlWithTemplateParameters(["patientUuid"])]
|
|
27
|
-
},
|
|
28
|
-
visitPage: {
|
|
29
|
-
_type: Type.String,
|
|
30
|
-
_default:
|
|
31
|
-
"${openmrsBase}/pihcore/visit/visit.page?patient=${patientUuid}&visit=${visitUuid}&suppressActions=true#/overview",
|
|
32
|
-
_validators: [
|
|
33
|
-
validators.isUrlWithTemplateParameters(["patientUuid", "visitUuid"])
|
|
34
|
-
]
|
|
35
|
-
},
|
|
36
|
-
homeVisitForm: {
|
|
37
|
-
_type: Type.String,
|
|
38
|
-
_default:
|
|
39
|
-
"${openmrsBase}/htmlformentryui/htmlform/editHtmlFormWithStandardUi.page?patientId=${patientUuid}&visitId=${visitUuid}&encounterId=${encounterUuid}&definitionUiResource=file:configuration/pih/htmlforms/section-mch-referral.xml&returnUrl=/mirebalais/spa/referrals-queue",
|
|
40
|
-
_validators: [
|
|
41
|
-
validators.isUrlWithTemplateParameters([
|
|
42
|
-
"patientUuid",
|
|
43
|
-
"visitUuid",
|
|
44
|
-
"encounterUuid"
|
|
45
|
-
])
|
|
46
|
-
]
|
|
47
|
-
}
|
|
48
|
-
},
|
|
49
|
-
pendingStatuses: {
|
|
50
|
-
_type: Type.Array,
|
|
51
|
-
_default: ["Pending status", "Referral unmet"],
|
|
52
|
-
_elements: {
|
|
53
|
-
_type: Type.String
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
});
|
|
37
|
+
/**
|
|
38
|
+
* This tells the app shell what versions of what OpenMRS backend modules
|
|
39
|
+
* are expected. Warnings will appear if suitable modules are not
|
|
40
|
+
* installed. The keys are the part of the module name after
|
|
41
|
+
* `openmrs-module-`; e.g., `openmrs-module-fhir2` becomes `fhir2`.
|
|
42
|
+
*/
|
|
43
|
+
const backendDependencies = {};
|
|
57
44
|
|
|
45
|
+
/**
|
|
46
|
+
* This function performs any setup that should happen at microfrontend
|
|
47
|
+
* load-time (such as defining the config schema) and then returns an
|
|
48
|
+
* object which describes how the React application(s) should be
|
|
49
|
+
* rendered.
|
|
50
|
+
*
|
|
51
|
+
* In this example, our return object contains a single page definition.
|
|
52
|
+
* It tells the app shell that the default export of `greeter.tsx`
|
|
53
|
+
* should be rendered when the route matches `hello`. The full route
|
|
54
|
+
* will be `openmrsSpaBase() + 'hello'`, which is usually
|
|
55
|
+
* `/openmrs/spa/hello`.
|
|
56
|
+
*/
|
|
57
|
+
function setupOpenMRS() {
|
|
58
58
|
const moduleName = "@pih/esm-referrals-queue-app";
|
|
59
|
-
const pageName = "referrals-queue";
|
|
60
|
-
|
|
61
59
|
const options = {
|
|
62
|
-
featureName:
|
|
63
|
-
moduleName
|
|
60
|
+
featureName: "referrals-queue",
|
|
61
|
+
moduleName,
|
|
64
62
|
};
|
|
65
63
|
|
|
64
|
+
defineConfigSchema(moduleName, configSchema);
|
|
65
|
+
|
|
66
66
|
registerBreadcrumbs([
|
|
67
67
|
{
|
|
68
|
-
path: `${window.spaBase}
|
|
69
|
-
title: "Referrals Queue"
|
|
70
|
-
}
|
|
68
|
+
path: `${window.spaBase}/referrals-queue`,
|
|
69
|
+
title: "Referrals Queue",
|
|
70
|
+
},
|
|
71
71
|
]);
|
|
72
72
|
|
|
73
73
|
return {
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
pages: [
|
|
75
|
+
{
|
|
76
|
+
load: getAsyncLifecycle(() => import("./root.component"), options),
|
|
77
|
+
route: "referrals-queue",
|
|
78
|
+
},
|
|
79
|
+
],
|
|
76
80
|
};
|
|
77
81
|
}
|
|
78
82
|
|
|
79
|
-
export { backendDependencies, importTranslation, setupOpenMRS };
|
|
83
|
+
export { backendDependencies, importTranslation, setupOpenMRS, version };
|
|
@@ -26,7 +26,7 @@ export default function ReferralsQueue(props: ReferralsQueueProps) {
|
|
|
26
26
|
const [toDateFocused, setToDateFocused] = React.useState(false);
|
|
27
27
|
const { t, i18n } = useTranslation();
|
|
28
28
|
|
|
29
|
-
const languageMatches = i18n.language
|
|
29
|
+
const languageMatches = i18n.language?.match(/^(en|fr|ht).*/);
|
|
30
30
|
const language = (languageMatches && languageMatches[1]) || "en";
|
|
31
31
|
|
|
32
32
|
React.useEffect(() => {
|
|
@@ -38,20 +38,25 @@ export default function ReferralsQueue(props: ReferralsQueueProps) {
|
|
|
38
38
|
const sub = getReferrals({
|
|
39
39
|
fromDate: fromDate.format("YYYY-MM-DD"),
|
|
40
40
|
toDate: toDate.format("YYYY-MM-DD"),
|
|
41
|
-
locale: language
|
|
42
|
-
}).subscribe(
|
|
41
|
+
locale: language,
|
|
42
|
+
}).subscribe(
|
|
43
|
+
(referrals) => setReferrals(referrals),
|
|
44
|
+
createErrorHandler()
|
|
45
|
+
);
|
|
43
46
|
return () => sub.unsubscribe();
|
|
44
47
|
}
|
|
45
48
|
}, [fromDate, toDate, language]);
|
|
46
49
|
|
|
47
50
|
// console.log(referrals);
|
|
48
51
|
const filteredReferrals = referrals
|
|
49
|
-
.filter(r => !referralTypeFilter || r.referral_type == referralTypeFilter)
|
|
50
|
-
.filter(r => !statusFilter || r.fulfillment_status == statusFilter)
|
|
51
|
-
.filter(r => matchQuery(r, ptQuery));
|
|
52
|
-
const referralTypes = [...new Set(referrals.map(r => r.referral_type))];
|
|
52
|
+
.filter((r) => !referralTypeFilter || r.referral_type == referralTypeFilter)
|
|
53
|
+
.filter((r) => !statusFilter || r.fulfillment_status == statusFilter)
|
|
54
|
+
.filter((r) => matchQuery(r, ptQuery));
|
|
55
|
+
const referralTypes = [...new Set(referrals.map((r) => r.referral_type))];
|
|
53
56
|
const statuses = [
|
|
54
|
-
...new Set(
|
|
57
|
+
...new Set(
|
|
58
|
+
referrals.map((r) => r.fulfillment_status).filter((r) => r != null)
|
|
59
|
+
),
|
|
55
60
|
];
|
|
56
61
|
return (
|
|
57
62
|
<div className={styles.container}>
|
|
@@ -68,7 +73,7 @@ export default function ReferralsQueue(props: ReferralsQueueProps) {
|
|
|
68
73
|
<SingleDatePicker
|
|
69
74
|
id="from-date"
|
|
70
75
|
date={fromDate}
|
|
71
|
-
onDateChange={date => setFromDate(date)}
|
|
76
|
+
onDateChange={(date) => setFromDate(date)}
|
|
72
77
|
focused={fromDateFocused}
|
|
73
78
|
onFocusChange={({ focused }) => setFromDateFocused(focused)}
|
|
74
79
|
isOutsideRange={(date: Moment) => date.isAfter(today)}
|
|
@@ -83,7 +88,7 @@ export default function ReferralsQueue(props: ReferralsQueueProps) {
|
|
|
83
88
|
<SingleDatePicker
|
|
84
89
|
id="to-date"
|
|
85
90
|
date={toDate}
|
|
86
|
-
onDateChange={date => setToDate(date)}
|
|
91
|
+
onDateChange={(date) => setToDate(date)}
|
|
87
92
|
focused={toDateFocused}
|
|
88
93
|
onFocusChange={({ focused }) => setToDateFocused(focused)}
|
|
89
94
|
isOutsideRange={(date: Moment) => date.isAfter(today)}
|
|
@@ -100,11 +105,11 @@ export default function ReferralsQueue(props: ReferralsQueueProps) {
|
|
|
100
105
|
<select
|
|
101
106
|
id="referral-type"
|
|
102
107
|
value={referralTypeFilter}
|
|
103
|
-
onChange={e => setReferralTypeFilter(e.target.value)}
|
|
108
|
+
onChange={(e) => setReferralTypeFilter(e.target.value)}
|
|
104
109
|
className={styles.dropdown}
|
|
105
110
|
>
|
|
106
111
|
<option value="">{t("any", "Any")}</option>
|
|
107
|
-
{referralTypes.map(t => (
|
|
112
|
+
{referralTypes.map((t) => (
|
|
108
113
|
<option key={t} value={t}>
|
|
109
114
|
{t}
|
|
110
115
|
</option>
|
|
@@ -121,7 +126,7 @@ export default function ReferralsQueue(props: ReferralsQueueProps) {
|
|
|
121
126
|
id="query-input"
|
|
122
127
|
type="text"
|
|
123
128
|
value={ptQuery}
|
|
124
|
-
onChange={e => setPtQuery(e.target.value)}
|
|
129
|
+
onChange={(e) => setPtQuery(e.target.value)}
|
|
125
130
|
className="omrs-input-outlined"
|
|
126
131
|
/>
|
|
127
132
|
</div>
|
|
@@ -134,11 +139,11 @@ export default function ReferralsQueue(props: ReferralsQueueProps) {
|
|
|
134
139
|
<select
|
|
135
140
|
id="status"
|
|
136
141
|
value={statusFilter}
|
|
137
|
-
onChange={e => setStatusFilter(e.target.value)}
|
|
142
|
+
onChange={(e) => setStatusFilter(e.target.value)}
|
|
138
143
|
className={styles.dropdown}
|
|
139
144
|
>
|
|
140
145
|
<option value="">{t("any", "Any")}</option>
|
|
141
|
-
{statuses.map(t => (
|
|
146
|
+
{statuses.map((t) => (
|
|
142
147
|
<option key={t} value={t}>
|
|
143
148
|
{t}
|
|
144
149
|
</option>
|
|
@@ -158,7 +163,7 @@ export default function ReferralsQueue(props: ReferralsQueueProps) {
|
|
|
158
163
|
function matchQuery(referral: Referral, query: string): boolean {
|
|
159
164
|
return (
|
|
160
165
|
!query ||
|
|
161
|
-
prepareQuery(query).every(regexp =>
|
|
166
|
+
prepareQuery(query).every((regexp) =>
|
|
162
167
|
regexp.test(removeDiacritics(referral.patient_name))
|
|
163
168
|
) ||
|
|
164
169
|
new RegExp(query, "i").test(referral.zl_emr_id)
|
|
@@ -166,7 +171,7 @@ function matchQuery(referral: Referral, query: string): boolean {
|
|
|
166
171
|
}
|
|
167
172
|
|
|
168
173
|
function prepareQuery(query: string): RegExp[] {
|
|
169
|
-
return query.split(/\s/).map(token => {
|
|
174
|
+
return query.split(/\s/).map((token) => {
|
|
170
175
|
const tokenCleaned = removeDiacritics(token);
|
|
171
176
|
return new RegExp("\\b" + tokenCleaned, "i");
|
|
172
177
|
});
|
|
@@ -4,7 +4,7 @@ import { map } from "rxjs/operators";
|
|
|
4
4
|
export function getReferrals({
|
|
5
5
|
fromDate,
|
|
6
6
|
toDate,
|
|
7
|
-
locale
|
|
7
|
+
locale,
|
|
8
8
|
}): Observable<Object[]> {
|
|
9
9
|
return openmrsObservableFetch(
|
|
10
10
|
`/ws/rest/v1/reportingrest/reportdata/cd7dfde7-764a-4da6-81c2-d5887ed1df51?startDate=${fromDate}&endDate=${toDate}&locale=${locale}`
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
fireEvent,
|
|
6
6
|
screen,
|
|
7
7
|
within,
|
|
8
|
-
waitFor
|
|
8
|
+
waitFor,
|
|
9
9
|
} from "@testing-library/react";
|
|
10
10
|
import MockDate from "mockdate";
|
|
11
11
|
import ReferralsQueue from "./referrals-queue.component";
|
|
@@ -25,7 +25,7 @@ const referrals = [
|
|
|
25
25
|
encounter_id: 12,
|
|
26
26
|
referral_type: "Test Referral Type",
|
|
27
27
|
encounter_uuid: "encounter-0fe1-4318-95a4-641d31745e09",
|
|
28
|
-
fulfillment_status: null
|
|
28
|
+
fulfillment_status: null,
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
patient_uuid: "ptbbbbbb-de0e-489f-b4c7-fe4579e07aa9",
|
|
@@ -37,7 +37,7 @@ const referrals = [
|
|
|
37
37
|
encounter_id: 13,
|
|
38
38
|
referral_type: "Mental Health",
|
|
39
39
|
encounter_uuid: "encounter-d5cb-4f7e-a1aa-bd6741a96381",
|
|
40
|
-
fulfillment_status: "Pending status"
|
|
40
|
+
fulfillment_status: "Pending status",
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
person_uuid: "ptcccccc-de0e-489f-b4c7-fe4579e07aa9",
|
|
@@ -49,8 +49,8 @@ const referrals = [
|
|
|
49
49
|
encounter_id: 14,
|
|
50
50
|
referral_type: "Family Member",
|
|
51
51
|
encounter_uuid: "encounter-67bc-435d-9929-670a98cefe4e",
|
|
52
|
-
fulfillment_status: "Test Complete"
|
|
53
|
-
}
|
|
52
|
+
fulfillment_status: "Test Complete",
|
|
53
|
+
},
|
|
54
54
|
];
|
|
55
55
|
|
|
56
56
|
(window as any).openmrsBase = "/openmrs";
|
|
@@ -93,7 +93,8 @@ describe("referrals queue", () => {
|
|
|
93
93
|
screen.getByText("28 Mar");
|
|
94
94
|
});
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
// TODO: fix and re-enable
|
|
97
|
+
/*it("navigates to the links", async () => {
|
|
97
98
|
const table = screen.getByRole("table");
|
|
98
99
|
const pt0DashLink = within(table).getByText(referrals[0].zl_emr_id);
|
|
99
100
|
fireEvent.click(pt0DashLink);
|
|
@@ -116,7 +117,7 @@ describe("referrals queue", () => {
|
|
|
116
117
|
`/openmrs/home-visit-form/${referrals[1].patient_uuid}/${referrals[1].visit_uuid}/${referrals[1].encounter_uuid}`
|
|
117
118
|
);
|
|
118
119
|
});
|
|
119
|
-
})
|
|
120
|
+
});*/
|
|
120
121
|
|
|
121
122
|
it("doesn't make non-pending statuses into links", () => {
|
|
122
123
|
const table = screen.getByRole("table");
|
|
@@ -126,7 +127,7 @@ describe("referrals queue", () => {
|
|
|
126
127
|
|
|
127
128
|
it("filters by referral type", () => {
|
|
128
129
|
const dropdown = screen.getByLabelText("Referral Type", {
|
|
129
|
-
selector: "select"
|
|
130
|
+
selector: "select",
|
|
130
131
|
});
|
|
131
132
|
fireEvent.change(dropdown, { target: { value: "Mental Health" } });
|
|
132
133
|
expect(screen.queryByText("PTID1")).toBeNull();
|
|
@@ -136,7 +137,7 @@ describe("referrals queue", () => {
|
|
|
136
137
|
|
|
137
138
|
it("infers list of referral types from data", () => {
|
|
138
139
|
const dropdown = screen.getByLabelText("Referral Type", {
|
|
139
|
-
selector: "select"
|
|
140
|
+
selector: "select",
|
|
140
141
|
});
|
|
141
142
|
fireEvent.change(dropdown, { target: { value: "Test Referral Type" } });
|
|
142
143
|
expect(screen.queryByDisplayValue("Test Referral Type")).not.toBeNull();
|
|
@@ -155,21 +156,21 @@ describe("referrals queue", () => {
|
|
|
155
156
|
expect(mockedGetReferrals).lastCalledWith({
|
|
156
157
|
fromDate: monthAgoString,
|
|
157
158
|
toDate: todayString,
|
|
158
|
-
locale: "en"
|
|
159
|
+
locale: "en",
|
|
159
160
|
});
|
|
160
161
|
const fromDateInput = screen.getByLabelText("From");
|
|
161
162
|
fireEvent.change(fromDateInput, { target: { value: "2020-01-01" } });
|
|
162
163
|
expect(mockedGetReferrals).lastCalledWith({
|
|
163
164
|
fromDate: "2020-01-01",
|
|
164
165
|
toDate: todayString,
|
|
165
|
-
locale: "en"
|
|
166
|
+
locale: "en",
|
|
166
167
|
});
|
|
167
168
|
const toDateInput = screen.getByLabelText("To");
|
|
168
169
|
fireEvent.change(toDateInput, { target: { value: "2020-03-01" } });
|
|
169
170
|
expect(mockedGetReferrals).lastCalledWith({
|
|
170
171
|
fromDate: "2020-01-01",
|
|
171
172
|
toDate: "2020-03-01",
|
|
172
|
-
locale: "en"
|
|
173
|
+
locale: "en",
|
|
173
174
|
});
|
|
174
175
|
});
|
|
175
176
|
|
package/src/root.component.tsx
CHANGED
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { BrowserRouter, Route } from "react-router-dom";
|
|
2
|
+
import { BrowserRouter, Routes, Route } from "react-router-dom";
|
|
3
3
|
import ReferralsQueue from "./referrals-queue/referrals-queue.component";
|
|
4
4
|
import styles from "./root.css";
|
|
5
|
+
import { appPath } from "./constants";
|
|
5
6
|
|
|
6
|
-
export default function Root(
|
|
7
|
+
export default function Root() {
|
|
7
8
|
return (
|
|
8
|
-
<div className={`omrs-main-content ${styles.
|
|
9
|
-
<BrowserRouter basename={
|
|
10
|
-
<
|
|
9
|
+
<div className={`omrs-main-content ${styles.ovconstantserflowAuto}`}>
|
|
10
|
+
<BrowserRouter basename={appPath}>
|
|
11
|
+
<Routes>
|
|
12
|
+
<Route path="/" element={<ReferralsQueue />} />
|
|
13
|
+
</Routes>
|
|
11
14
|
</BrowserRouter>
|
|
12
15
|
</div>
|
|
13
16
|
);
|