Skip to content

Commit c1c2bf2

Browse files
authored
Merge pull request #1536 from onaio/endfund-reports
MDA Lite Reporting
2 parents 7d8945e + bf55e0f commit c1c2bf2

File tree

48 files changed

+6735
-6
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+6735
-6
lines changed

.env.sample

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ REACT_APP_ENABLE_ASSIGN=true
1414
REACT_APP_ENABLE_ABOUT=true
1515
REACT_APP_ENABLE_TEAMS=true
1616
REACT_APP_ENABLE_MDA_POINT=true
17+
REACT_APP_ENABLE_MDA_LITE=true
1718
REACT_APP_ENABLE_PRACTITIONERS=true
1819
REACT_APP_ENABLE_JURISDICTION_METADATA_UPLOAD=true
1920
REACT_APP_ENABLE_PLANNING=true
@@ -52,6 +53,11 @@ REACT_APP_SUPERSET_DYNAMIC_MDA_REPORTING_JURISDICTIONS_FOCUS_AREA_LEVEL=3
5253
REACT_APP_SUPERSET_STRUCTURES_SLICE=0
5354
REACT_APP_SUPERSET_TASKS_SLICE=0
5455
REACT_APP_SUPERSET_PLAN_STRUCTURE_PIVOT_SLICE=0
56+
REACT_APP_SUPERSET_MDA_LITE_REPORTING_PLANS_SLICE=0
57+
REACT_APP_SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_DATA_SLICES=0
58+
REACT_APP_SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_COLUMNS=mdaLiteJurisdictionsColumns
59+
REACT_APP_SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_FOCUS_AREA_LEVEL=99
60+
5561
REACT_APP_GISIDA_TIMEOUT=3000
5662
REACT_APP_GISIDA_MAPBOX_TOKEN=hunter2
5763
REACT_APP_GISIDA_ONADATA_API_TOKEN=hunter2
@@ -178,6 +184,11 @@ REACT_APP_ASSIGNED_TEAMS_REQUEST_PAGE_SIZE=1000
178184

179185
REACT_APP_OPENSRP_GENERATED_TASKS_INTERVENTIONS=Dynamic-FI,FI
180186

187+
REACT_APP_SHOW_MAP_AT_JURISDICTION_LEVEL=99
188+
REACT_APP_SUPERSET_MDA_LITE_REPORTING_SUPERVISORS_DATA_SLICE=633
189+
REACT_APP_SUPERSET_MDA_LITE_REPORTING_CDD_DATA_SLICE=630
190+
REACT_APP_SUPERSET_MDA_LITE_REPORTING_WARD_SLICE=631
191+
REACT_APP_SUPERSET_MDA_LITE_REPORTING_WARD_GEOJSON_SLICE=632
181192
REACT_APP_CASE_TRIGGERED_DRAFT_EDIT_ADD_ACTIVITIES=false
182193
REACT_APP_HIDE_PLAN_FORM_FIELDS_ON_EDIT=''
183194

docs/env.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,48 @@ Below is a list of currently supported environment variables:
114114
- Optional parameter of plan intervention types whose tasks should be generated on opensrp
115115
- Options: FI, IRS, IRS_Lite, MDA, MDA-Point, Dynamic-FI, Dynamic-IRS and Dynamic-MDA
116116

117+
- **REACT_APP_ENABLE_MDA_LITE**
118+
119+
- **not Required**; _(string)_
120+
- to activate set the env to `true`, any other value will be interpreted as false
121+
- enables the monitor MDA Lite reporting page
122+
123+
- **REACT_APP_SUPERSET_MDA_LITE_REPORTING_PLANS_SLICE**
124+
125+
- MDA-Lite plans Superset slice id
126+
- **Required**
127+
128+
- **REACT_APP_SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_DATA_SLICES**
129+
130+
- MDA-Lite jurisdictions report Superset slice id
131+
- **Required**
132+
133+
- **REACT_APP_SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_COLUMNS**
134+
135+
- MDA-Lite jurisdictions report table columns
136+
- **Required**
137+
138+
- **REACT_APP_SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_FOCUS_AREA_LEVEL**
139+
140+
- MDA-Lite level were focus areas start
141+
- **Required**
142+
143+
- **REACT_APP_SHOW_MAP_AT_JURISDICTION_LEVEL**
144+
145+
- Jurisdiction level on which to show map
146+
- Default value: 99
147+
- **Not Required**
148+
149+
- **REACT_APP_SUPERSET_MDA_LITE_REPORTING_CDD_DATA_SLICE**
150+
151+
- MDA-Lite CDD Superset slice id
152+
- **Required**
153+
154+
- **REACT_APP_SUPERSET_MDA_LITE_REPORTING_SUPERVISORS_DATA_SLICE**
155+
156+
- MDA-Lite supervisors Superset slice id
157+
- **Required**
158+
117159
- **REACT_APP_HIDE_PLAN_FORM_FIELDS_ON_EDIT**
118160

119161
- **not Required**; _(string)_

src/App/App.tsx

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ import {
8282
REACT_LOGIN_URL,
8383
REPORT_IRS_LITE_PLAN_URL,
8484
REPORT_IRS_PLAN_URL,
85+
REPORT_MDA_LITE_CDD_REPORT_URL,
86+
REPORT_MDA_LITE_PLAN_URL,
87+
REPORT_MDA_LITE_WARD_URL,
8588
REPORT_MDA_PLAN_URL,
8689
REPORT_MDA_POINT_PLAN_URL,
8790
REPORT_SMC_PLAN_URL,
@@ -123,6 +126,12 @@ import ConnectedAutoSelectView from '../containers/pages/JurisdictionAssignment/
123126
import { ConnectedEntryView } from '../containers/pages/JurisdictionAssignment/EntryView';
124127
import ConnectedJurisdictionAssignmentView from '../containers/pages/JurisdictionAssignment/ManualSelectJurisdiction';
125128
import JurisdictionMetadata from '../containers/pages/JurisdictionMetadata';
129+
import ConnectedMDALiteCddReports from '../containers/pages/MDALite/cddReports/cdds';
130+
import ConnectedMDALiteSupervisorReports from '../containers/pages/MDALite/cddReports/supervisors';
131+
import ConnectedMdaLiteJurisdictionReport from '../containers/pages/MDALite/jurisdictionsReport';
132+
import ConnectedMDALiteMapReport from '../containers/pages/MDALite/map';
133+
import ConnectedMDALitePlansList from '../containers/pages/MDALite/plans';
134+
import ConnectedMDALiteWardsReport from '../containers/pages/MDALite/wardReports';
126135
import ConnectedChildReports from '../containers/pages/MDAPoint/ChildReports';
127136
import ConnectedClientListView from '../containers/pages/MDAPoint/ClientListView';
128137
import ConnectedMdaPointJurisdictionReport from '../containers/pages/MDAPoint/jurisdictionsReport';
@@ -281,6 +290,56 @@ const App = () => {
281290
path={`${REPORT_SMC_PLAN_URL}/:planId/:jurisdictionId/${MAP}`}
282291
component={ConnectedSMCReportingMap}
283292
/>
293+
{/* MDA Lite Reporting plan table view */}
294+
<ConnectedPrivateRoute
295+
redirectPath={APP_CALLBACK_URL}
296+
disableLoginProtection={DISABLE_LOGIN_PROTECTION}
297+
exact={true}
298+
path={REPORT_MDA_LITE_PLAN_URL}
299+
component={ConnectedMDALitePlansList}
300+
/>
301+
<ConnectedPrivateRoute
302+
redirectPath={APP_CALLBACK_URL}
303+
disableLoginProtection={DISABLE_LOGIN_PROTECTION}
304+
exact={true}
305+
path={`${REPORT_MDA_LITE_PLAN_URL}/:planId`}
306+
component={ConnectedMdaLiteJurisdictionReport}
307+
/>
308+
<ConnectedPrivateRoute
309+
redirectPath={APP_CALLBACK_URL}
310+
disableLoginProtection={DISABLE_LOGIN_PROTECTION}
311+
exact={true}
312+
path={`${REPORT_MDA_LITE_PLAN_URL}/:planId/:jurisdictionId`}
313+
component={ConnectedMdaLiteJurisdictionReport}
314+
/>
315+
<ConnectedPrivateRoute
316+
redirectPath={APP_CALLBACK_URL}
317+
disableLoginProtection={DISABLE_LOGIN_PROTECTION}
318+
exact={true}
319+
path={`${REPORT_MDA_LITE_PLAN_URL}/:planId/:jurisdictionId/${MAP}`}
320+
component={ConnectedMDALiteMapReport}
321+
/>
322+
<ConnectedPrivateRoute
323+
redirectPath={APP_CALLBACK_URL}
324+
disableLoginProtection={DISABLE_LOGIN_PROTECTION}
325+
exact={true}
326+
path={`${REPORT_MDA_LITE_WARD_URL}/:planId/:jurisdictionId`}
327+
component={ConnectedMDALiteWardsReport}
328+
/>
329+
<ConnectedPrivateRoute
330+
redirectPath={APP_CALLBACK_URL}
331+
disableLoginProtection={DISABLE_LOGIN_PROTECTION}
332+
exact={true}
333+
path={`${REPORT_MDA_LITE_CDD_REPORT_URL}/:planId/:jurisdictionId`}
334+
component={ConnectedMDALiteSupervisorReports}
335+
/>
336+
<ConnectedPrivateRoute
337+
redirectPath={APP_CALLBACK_URL}
338+
disableLoginProtection={DISABLE_LOGIN_PROTECTION}
339+
exact={true}
340+
path={`${REPORT_MDA_LITE_CDD_REPORT_URL}/:planId/:jurisdictionId/:supervisorId`}
341+
component={ConnectedMDALiteCddReports}
342+
/>
284343
{/* IRS Reporting plan table view */}
285344
<ConnectedPrivateRoute
286345
redirectPath={APP_CALLBACK_URL}

src/App/tests/AppNoBackend.test.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ jest.mock('../../configs/env', () => ({
1818
SUPERSET_IRS_LITE_REPORTING_JURISDICTIONS_DATA_SLICES: '11, 12',
1919
SUPERSET_IRS_MOPUP_REPORTING_JURISDICTIONS_DATA_SLICES: '0',
2020
SUPERSET_IRS_REPORTING_JURISDICTIONS_DATA_SLICES: '11, 12',
21+
SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_DATA_SLICES: '1',
2122
SUPERSET_MDA_POINT_REPORTING_JURISDICTIONS_DATA_SLICES: '12',
2223
SUPERSET_SMC_REPORTING_JURISDICTIONS_DATA_SLICES: '1',
2324
}));

src/components/GisidaLite/helpers.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ export const fillLayerTemplate = {
7272

7373
export const gsLiteStyle: Style | string = DIGITAL_GLOBE_CONNECT_ID
7474
? {
75+
glyphs: 'mapbox://fonts/mapbox/{fontstack}/{range}.pbf',
7576
layers: [
7677
{
7778
id: 'earthwatch-basemap',
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
2+
import { DropDownCellProps } from '@onaio/drill-down-table';
3+
import { Dictionary } from '@onaio/utils';
4+
import React from 'react';
5+
import { Link } from 'react-router-dom';
6+
import { Col, Row } from 'reactstrap';
7+
import { SHOW_MAP_AT_JURISDICTION_LEVEL } from '../../configs/env';
8+
import { MAP, REPORT_MDA_LITE_WARD_URL } from '../../constants';
9+
10+
/** Interface for linked cell props */
11+
export interface LinkedCellProps extends DropDownCellProps {
12+
urlPath?: string;
13+
}
14+
15+
/** Component that will be rendered in drop-down table cells showing a link
16+
* that moves you to the next hierarchical level.
17+
*/
18+
const MDALiteTableCell: React.ElementType<LinkedCellProps> = (props: LinkedCellProps) => {
19+
const { cell, cellValue, hasChildren, urlPath } = props;
20+
const original: Dictionary = cell.row.original;
21+
const { jurisdiction_id, jurisdiction_depth, plan_id } = original;
22+
const url = `${urlPath}/${jurisdiction_id}`;
23+
const wardUrl = `${REPORT_MDA_LITE_WARD_URL}/${plan_id}/${jurisdiction_id}`;
24+
const jurLink = <Link to={url}>{cellValue}</Link>;
25+
if (SHOW_MAP_AT_JURISDICTION_LEVEL === +jurisdiction_depth) {
26+
return (
27+
<div style={{ minWidth: '100%' }}>
28+
<Row>
29+
<Col sm={8}>
30+
<Link to={wardUrl}>{cellValue}</Link>
31+
</Col>
32+
<Col sm={4}>
33+
<Link style={{ paddingLeft: '20px' }} to={`${url}/${MAP}`}>
34+
<FontAwesomeIcon icon={['fas', MAP]} />
35+
</Link>
36+
</Col>
37+
</Row>
38+
</div>
39+
);
40+
}
41+
const val = hasChildren ? (
42+
jurLink
43+
) : (
44+
<span className="plan-jurisdiction-name name-label">{cellValue}</span>
45+
);
46+
return <div>{val}</div>;
47+
};
48+
49+
export default MDALiteTableCell;

src/components/page/Header/index.tsx

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import {
2626
ENABLE_IRS_MOPUP_REPORTING,
2727
ENABLE_IRS_PERFORMANCE_REPORT,
2828
ENABLE_JURISDICTION_METADATA_UPLOAD,
29+
ENABLE_MDA_LITE,
2930
ENABLE_MDA_POINT,
3031
ENABLE_PLANNING,
3132
ENABLE_POPULATION_SERVER_SETTINGS,
@@ -51,6 +52,7 @@ import {
5152
JURISDICTION_METADATA,
5253
LOGIN,
5354
MANIFEST_RELEASES,
55+
MDA_LITE_REPORTING_TITLE,
5456
MDA_POINT_REPORTING_TITLE,
5557
MDA_REPORTING_TITLE,
5658
MONITOR,
@@ -84,6 +86,7 @@ import {
8486
REACT_LOGIN_URL,
8587
REPORT_IRS_LITE_PLAN_URL,
8688
REPORT_IRS_PLAN_URL,
89+
REPORT_MDA_LITE_PLAN_URL,
8790
REPORT_MDA_PLAN_URL,
8891
REPORT_MDA_POINT_PLAN_URL,
8992
REPORT_SMC_PLAN_URL,
@@ -147,7 +150,8 @@ export class HeaderComponent extends React.Component<HeaderProps, State> {
147150
ENABLE_IRS_PERFORMANCE_REPORT ||
148151
ENABLE_IRS_MOPUP_REPORTING ||
149152
ENABLE_IRS_LITE ||
150-
ENABLE_SMC;
153+
ENABLE_SMC ||
154+
ENABLE_MDA_LITE;
151155

152156
return (
153157
<div>
@@ -288,6 +292,20 @@ export class HeaderComponent extends React.Component<HeaderProps, State> {
288292
</DropdownItem>
289293
</div>
290294
)}
295+
296+
{ENABLE_MDA_LITE && (
297+
<div>
298+
<DropdownItem>
299+
<NavLink
300+
to={REPORT_MDA_LITE_PLAN_URL}
301+
className="nav-link"
302+
activeClassName="active"
303+
>
304+
{MDA_LITE_REPORTING_TITLE}
305+
</NavLink>
306+
</DropdownItem>
307+
</div>
308+
)}
291309
{ENABLE_DYNAMIC_MDA && (
292310
<div>
293311
<DropdownItem>

src/configs/__mocks__/env.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,13 @@ export const SUPERSET_SMC_REPORTING_INDICATOR_STOPS = 'nigeria2020';
228228
export const CHECK_SESSION_EXPIRY_STATUS = false;
229229

230230
export const OPENSRP_GENERATED_TASKS_INTERVENTIONS = [];
231+
export const SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_DATA_SLICES = '1,2';
232+
export const SUPERSET_MDA_LITE_REPORTING_PLANS_SLICE = '1';
233+
export const SUPERSET_MDA_LITE_REPORTING_SUPERVISORS_DATA_SLICE = '1';
234+
export const SUPERSET_MDA_LITE_REPORTING_WARD_SLICE = '1';
235+
export const SUPERSET_MDA_LITE_REPORTING_WARD_GEOJSON_SLICE = '1';
236+
export const SUPERSET_MDA_LITE_REPORTING_CDD_DATA_SLICE = '1';
237+
export const SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_COLUMNS = 'mdaLiteJurisdictionsColumns';
231238

232239
export const HIDE_PLAN_FORM_FIELDS_ON_EDIT = [];
233240
export const CASE_TRIGGERED_DRAFT_EDIT_ADD_ACTIVITIES = false;

src/configs/env.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,10 @@ export type ENABLE_DYNAMIC_MDA = typeof ENABLE_DYNAMIC_MDA;
7171
export const ENABLE_SMC = process.env.REACT_APP_ENABLE_SMC === 'true';
7272
export type ENABLE_SMC = typeof ENABLE_SMC;
7373

74+
/** Do you want to enable the MDA Lite plan features? */
75+
export const ENABLE_MDA_LITE = process.env.REACT_APP_ENABLE_MDA_LITE === 'true';
76+
export type ENABLE_MDA_LITE = typeof ENABLE_MDA_LITE;
77+
7478
/** Do you want to enable the MDA Point plan features? */
7579
export const CLIENT_LABEL = process.env.REACT_APP_CLIENT_LABEL || 'client';
7680
export type CLIENT_LABEL = typeof CLIENT_LABEL;
@@ -588,6 +592,42 @@ export const OPENSRP_GENERATED_TASKS_INTERVENTIONS = (
588592
).split(',');
589593
export type OPENSRP_GENERATED_TASKS_INTERVENTIONS = typeof OPENSRP_GENERATED_TASKS_INTERVENTIONS;
590594

595+
export const SUPERSET_MDA_LITE_REPORTING_PLANS_SLICE =
596+
process.env.REACT_APP_SUPERSET_MDA_LITE_REPORTING_PLANS_SLICE || '0';
597+
export type SUPERSET_MDA_LITE_REPORTING_PLANS_SLICE = typeof SUPERSET_MDA_LITE_REPORTING_PLANS_SLICE;
598+
599+
export const SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_DATA_SLICES =
600+
process.env.REACT_APP_SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_DATA_SLICES || '0';
601+
export type SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_DATA_SLICES = typeof SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_DATA_SLICES;
602+
603+
export const SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_COLUMNS =
604+
process.env.REACT_APP_SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_COLUMNS ||
605+
'mdaLiteJurisdictionsColumns';
606+
export type SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_COLUMNS = typeof SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_COLUMNS;
607+
608+
export const SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_FOCUS_AREA_LEVEL =
609+
process.env.REACT_APP_SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_FOCUS_AREA_LEVEL || '99';
610+
export type SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_FOCUS_AREA_LEVEL = typeof SUPERSET_MDA_LITE_REPORTING_JURISDICTIONS_FOCUS_AREA_LEVEL;
611+
612+
export const SHOW_MAP_AT_JURISDICTION_LEVEL =
613+
Number(process.env.REACT_APP_SHOW_MAP_AT_JURISDICTION_LEVEL) || 99;
614+
export type SHOW_MAP_AT_JURISDICTION_LEVEL = typeof SHOW_MAP_AT_JURISDICTION_LEVEL;
615+
616+
export const SUPERSET_MDA_LITE_REPORTING_SUPERVISORS_DATA_SLICE =
617+
process.env.REACT_APP_SUPERSET_MDA_LITE_REPORTING_SUPERVISORS_DATA_SLICE || '0';
618+
export type SUPERSET_MDA_LITE_REPORTING_SUPERVISORS_DATA_SLICE = typeof SUPERSET_MDA_LITE_REPORTING_SUPERVISORS_DATA_SLICE;
619+
620+
export const SUPERSET_MDA_LITE_REPORTING_CDD_DATA_SLICE =
621+
process.env.REACT_APP_SUPERSET_MDA_LITE_REPORTING_CDD_DATA_SLICE || '0';
622+
export type SUPERSET_MDA_LITE_REPORTING_CDD_DATA_SLICE = typeof SUPERSET_MDA_LITE_REPORTING_CDD_DATA_SLICE;
623+
624+
export const SUPERSET_MDA_LITE_REPORTING_WARD_SLICE =
625+
process.env.REACT_APP_SUPERSET_MDA_LITE_REPORTING_WARD_SLICE || '0';
626+
export type SUPERSET_MDA_LITE_REPORTING_WARD_SLICE = typeof SUPERSET_MDA_LITE_REPORTING_WARD_SLICE;
627+
628+
export const SUPERSET_MDA_LITE_REPORTING_WARD_GEOJSON_SLICE =
629+
process.env.REACT_APP_SUPERSET_MDA_LITE_REPORTING_WARD_GEOJSON_SLICE || '0';
630+
export type SUPERSET_MDA_LITE_REPORTING_WARD_GEOJSON_SLICE = typeof SUPERSET_MDA_LITE_REPORTING_WARD_GEOJSON_SLICE;
591631
export const HIDE_PLAN_FORM_FIELDS_ON_EDIT = (
592632
process.env.REACT_APP_HIDE_PLAN_FORM_FIELDS_ON_EDIT || ''
593633
).split(',');

0 commit comments

Comments
 (0)