Skip to content

Commit

Permalink
Merge pull request #2 from dhis2/v1.0.2
Browse files Browse the repository at this point in the history
v1.0.2
  • Loading branch information
Erik Arenhill authored Dec 13, 2018
2 parents d284fec + 5e16f27 commit 49f1091
Show file tree
Hide file tree
Showing 13 changed files with 3,948 additions and 4,711 deletions.
8,370 changes: 3,741 additions & 4,629 deletions package-lock.json

Large diffs are not rendered by default.

18 changes: 13 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "immunization-analysis",
"description": "Immunization data analysis app for DHIS2",
"version": "1.0.1",
"version": "1.0.2",
"dependencies": {
"angular": "^1.5.5",
"angular-animate": "^1.5.5",
Expand All @@ -15,19 +15,24 @@
"chart.js": "2.7.3",
"chartjs-plugin-annotation": "^0.5.7",
"chartjs-plugin-stacked100": "^0.4.6",
"d2": "^29.1.5",
"d2-ui": "^29.0.29",
"d2-utilizr": "^0.2.16",
"file-saver": "^1.3.3",
"i18next": "^10.0.1",
"jquery": "^3.2.1",
"moment": "^2.19.3",
"ng-i18next": "^1.0.5",
"proptypes": "^1.1.0",
"regression": "^2.0.0",
"rxjs": "^5.5.12",
"ui-select": "^0.19.8"
},
"devDependencies": {
"babel": "^6.23.0",
"babel-core": "^6.26.0",
"babel-loader": "^7.1.2",
"babel-core": "^6.26.3",
"babel-loader": "^7.1.5",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"colors": "^1.2.1",
"copy-webpack-plugin": "^4.2.0",
"css-loader": "^0.28.7",
Expand All @@ -38,6 +43,9 @@
"html-loader": "^0.5.1",
"html-webpack-plugin": "^2.30.1",
"i18next-conv": "^4.1.0",
"material-ui": "^0.20.2",
"react": "^16.6.3",
"react-dom": "^16.6.3",
"recursive-readdir": "^2.2.1",
"require": "^2.4.20",
"style-loader": "^0.19.0",
Expand All @@ -61,7 +69,7 @@
"lint-all": "eslint src; exit 0",
"manifest": "d2-manifest package.json build/manifest.webapp",
"postbuild": "cp -r i18n build/ && npm run manifest",
"prebuild": "rm -rf build && npm run validate && npm run lint-all",
"prebuild": "rm -rf build && npm run lint-all",
"refresh-translations-template": "npm run extract-pot -- -o translations.pot && git add ./i18n/translations.pot",
"start": "d2-manifest package.json manifest.webapp && npm run convert-po && webpack-dev-server",
"test": "echo \"Error: no test specified\" && exit 1",
Expand Down
5 changes: 4 additions & 1 deletion src/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ import "./report/charts/performanceChartTimeSummary.js";
//CSS
import "./css/style.css";

import initHeaderBar from "./headerbar.jsx";


var app = angular.module("epiApp",
["smart-table", "ngAnimate", "ngSanitize", "ngRoute", "ui.bootstrap", "ui.select", "angularBootstrapNavTree", "d2",
Expand All @@ -64,6 +66,7 @@ var app = angular.module("epiApp",
/**Bootstrap*/
angular.element(document).ready(
function() {
initHeaderBar("#header");

var initInjector = angular.injector(["ng"]);
var $http = initInjector.get("$http");
Expand All @@ -77,7 +80,7 @@ angular.element(document).ready(
//Not production => rely on webpack-dev-server proxy
const baseUrl = process.env.NODE_ENV === "production" ? response.data.activities.dhis.href : "";
app.constant("BASE_URL", baseUrl);
app.constant("API_VERSION", "27");
app.constant("API_VERSION", "29");

angular.bootstrap(document, ["epiApp"]);
}
Expand Down
26 changes: 13 additions & 13 deletions src/appCommons/chartHelper.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@

export const addDownloadChartAsImageHandler = function(chartContainer, filenamePrefix) {

var button = document.createElement("a");
button.className = "download-button btn btn-default";
button.innerText = i18next.t("Download as image");
var button = document.createElement("a");
button.className = "download-button btn btn-default";
button.innerText = i18next.t("Download as image");

var canvas = chartContainer.querySelector("canvas");
canvas.parentNode.insertBefore(button, canvas);
//<a href='#' class='download-button btn btn-default'>{{\'Download as image\' | i18next}}</a>
button.onclick = function(){
var dataURL = canvas.toDataURL('image/png');
var now = new Date();
button.download = filenamePrefix + "_" + now.getFullYear() + "_" + (now.getMonth()+1) + "_" + now.getDate() + ".png";
button.href = dataURL;
}
}
var canvas = chartContainer.querySelector("canvas");
canvas.parentNode.insertBefore(button, canvas);
//<a href='#' class='download-button btn btn-default'>{{\'Download as image\' | i18next}}</a>
button.onclick = function(){
var dataURL = canvas.toDataURL("image/png");
var now = new Date();
button.download = filenamePrefix + "_" + now.getFullYear() + "_" + (now.getMonth()+1) + "_" + now.getDate() + ".png";
button.href = dataURL;
};
};
9 changes: 6 additions & 3 deletions src/appCore/d2Map.js
Original file line number Diff line number Diff line change
Expand Up @@ -194,11 +194,11 @@ export default function (requestService, d2Meta, d2Utils, $q) {

//Save template to systemSettings
requestService.post("/dataStore/epiApp/settings", angular.toJson(_map)).then(
function (data) {
function success() {
_ready = true;
deferred.resolve(true);
},
function (data) {
function fail() {
_ready = false;
deferred.resolve(false);
}
Expand All @@ -225,7 +225,10 @@ export default function (requestService, d2Meta, d2Utils, $q) {
d2Meta.currentUser().then(function(response) {
var groups = response.userGroups;
for (var i = 0; i < groups.length; i++) {
if (groups[i].id === _map.rim.userGroup) deferred.resolve(true);
if (groups[i].id === _map.rim.userGroup) {
deferred.resolve(true);
return;
}
}
deferred.resolve(false);
});
Expand Down
25 changes: 13 additions & 12 deletions src/appCore/d2Meta.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/**
/**
© Copyright 2017 the World Health Organization (WHO).
This software is distributed under the terms of the GNU General Public License version 3 (GPL Version 3),
copied verbatim in the file “COPYING”. In applying this license, WHO does not waive any of the privileges and
Expand Down Expand Up @@ -134,7 +134,7 @@ export default function (requestService, periodService, d2Utils, $q) {
var boundary = [];
var subunits = [];

var ou, boundary;
var ou;
for (var i = 0; i < orgunits.length; i++) {
ou = orgunits[i];
var isBoundary = false;
Expand Down Expand Up @@ -205,7 +205,7 @@ export default function (requestService, periodService, d2Utils, $q) {

requestService.getSingleData(requestURL).then(
function(data) { //success
var data = data.organisationUnits;
data = data.organisationUnits;

var minLevel = 100;
var lowestOrgunit = null;
Expand Down Expand Up @@ -240,8 +240,7 @@ export default function (requestService, periodService, d2Utils, $q) {

requestService.getSingleData(requestURL).then(
function(data) { //success
var data = data.organisationUnits;
deferred.resolve(data);
deferred.resolve(data.organisationUnits);
},
function(error) { //error
deferred.reject("Error in userOrgunits()");
Expand All @@ -268,8 +267,7 @@ export default function (requestService, periodService, d2Utils, $q) {
requestService.getSingleData(requestURL).then(
function(data) { //success

var data = data.organisationUnits;
deferred.resolve(data);
deferred.resolve(data.organisationUnits);

},
function(error) { //error
Expand All @@ -296,8 +294,7 @@ export default function (requestService, periodService, d2Utils, $q) {

requestService.getSingleData(requestURL).then(
function(data) { //success
var data = data.organisationUnits;
deferred.resolve(data);
deferred.resolve(data.organisationUnits);
},
function(error) { //error
deferred.reject("Error in userAnalysisOrgunits()");
Expand Down Expand Up @@ -618,13 +615,13 @@ export default function (requestService, periodService, d2Utils, $q) {
function(datas) {

var displayDictionary = {};
for (var i = 0; i < datas[0].length; i++) {
for (let i = 0; i < datas[0].length; i++) {
displayDictionary[datas[0][i].id] = datas[0][i].displayName;
}
for (var i = 0; i < datas[1].length; i++) {
for (let i = 0; i < datas[1].length; i++) {
displayDictionary[datas[1][i].id] = datas[1][i].displayName;
}
for (var i = 0; i < datas[2].length; i++) {
for (let i = 0; i < datas[2].length; i++) {
displayDictionary[datas[2][i].id] = datas[2][i].value;
}

Expand Down Expand Up @@ -764,6 +761,9 @@ export default function (requestService, periodService, d2Utils, $q) {

var requestURL = "/metadata";
if (strategy) requestURL += "?strategy=" + strategy;

//console.log(JSON.stringify(payload));

requestService.post(requestURL, payload).then(
function(data) {
deferred.resolve(data);
Expand All @@ -790,6 +790,7 @@ export default function (requestService, periodService, d2Utils, $q) {
function(error){
console.log("d2meta error: postMetadata()");
console.log(error);
deferred.reject(error);
}
);

Expand Down
55 changes: 55 additions & 0 deletions src/headerbar-theme.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@

import Spacing from "material-ui/styles/spacing";
import getMuiTheme from "material-ui/styles/getMuiTheme";
import {
blue700,
blue100,
orange500,
grey100,
grey500,
darkBlack,
white,
grey400,
} from "material-ui/styles/colors";

import { fade } from "material-ui/utils/colorManipulator";

const theme = {
spacing: Spacing,
fontFamily: "Roboto, sans-serif",
palette: {
primary1Color: "#276696",
primary2Color: blue700,
primary3Color: blue100,
accent1Color: orange500,
accent2Color: grey100,
accent3Color: grey500,
textColor: darkBlack,
alternateTextColor: white,
canvasColor: white,
borderColor: grey400,
disabledColor: fade(darkBlack, 0.3),
},
};

function createAppTheme(style) {
return {
sideBar: {
backgroundColor: "#F3F3F3",
backgroundColorItem: "transparent",
backgroundColorItemActive: style.palette.accent2Color,
textColor: style.palette.textColor,
textColorActive: style.palette.primary1Color,
borderStyle: "1px solid #e1e1e1",
},
forms: {
minWidth: 350,
maxWidth: 900,
},
};
}

const muiTheme = getMuiTheme(theme);
const appTheme = createAppTheme(theme);

export default Object.assign({}, muiTheme, appTheme);
54 changes: 54 additions & 0 deletions src/headerbar.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import React from "react";
import ReactDOM from "react-dom";
import PropTypes from 'prop-types';

import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';

import theme from "./headerbar-theme.jsx";

import D2Library from 'd2/lib/d2';

import HeaderBarComponent from "d2-ui/lib/app-header/HeaderBar";
import headerBarStore$ from "d2-ui/lib/app-header/headerBar.store";
import withStateFrom from "d2-ui/lib/component-helpers/withStateFrom";

const dhisConfig = DHIS_CONFIG; // eslint-disable-line

let HeaderBar = withStateFrom(headerBarStore$, HeaderBarComponent);

class HeaderBarWrapper extends React.Component {
getChildContext() {
return {
d2: this.props.d2,
muiTheme: theme,
};
}

render() {
return (
<HeaderBar />
);
}
}
HeaderBarWrapper.childContextTypes = {
d2: PropTypes.object,
muiTheme: PropTypes.object,
};


export default function initHeaderBar(targetSelector){
D2Library.getManifest('manifest.webapp')
.then((manifest) => {
const baseUrl = process.env.NODE_ENV === 'production' ? manifest.getBaseUrl() : dhisConfig.baseUrl;
D2Library.config.baseUrl = `${baseUrl}/api`;
//log.info(`Loading: ${manifest.name} v${manifest.version}`);
//log.info(`Built ${manifest.manifest_generated_at}`);
})
.then(D2Library.getUserSettings)
.then((settings) => {})
.then(D2Library.init)
.then((d2) => {
console.log("D2 initialized", d2);
ReactDOM.render(<MuiThemeProvider><HeaderBarWrapper d2={d2} /></MuiThemeProvider>, document.querySelector(targetSelector));
})
};
28 changes: 1 addition & 27 deletions src/index.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -23,33 +23,7 @@
font-family: 'Roboto';
}
</style>
<script type="text/javascript" src="../../../dhis-web-commons/javascripts/jQuery/jquery.min.js"></script>
<script type="text/javascript" src="../../../dhis-web-core-resource/react-15/react-15.min.js"></script>
<script type="text/javascript" src="../../../dhis-web-core-resource/rxjs/4.1.0/rx.lite.min.js"></script>
<script type="text/javascript" src="../../../dhis-web-core-resource/lodash/4.15.0/lodash.min.js"></script>
<script type="text/javascript" src="../../../dhis-web-core-resource/lodash-functional/lodash-functional.js"></script>
<script type="text/javascript" src="../../../dhis-web-commons/javascripts/header-bar/babel-polyfill.js"></script>
<script type="text/javascript" src="../../../dhis-web-commons/javascripts/header-bar/header-bar.js"></script>

<script>
// Needs to be wrapped in jQuery to be sure the DOM is parsed as the script is not at the bottom.
jQuery(function () {
try {
if ('Dhis2HeaderBar' in window) {
Dhis2HeaderBar.initHeaderBar(document.querySelector('#header'),
"../../../api",
{noLoadingIndicator: true}
);
}
} catch (e) {
if ('console' in window ) {
console.error(e);
}
}
});
</script>



<div id="header"></div>
Expand Down
2 changes: 1 addition & 1 deletion src/libs/prototypes.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,6 @@ var resultHandler = function (functionToCall, extraParameter, includeData) {
};
if (!Array.prototype.move) {
Array.prototype.move = function(from, to) {
this.splice(to, 0, this.splice(from, 1)[0]);
this.splice(to, 0, this.splice(from, 1)[0]);
};
}
2 changes: 2 additions & 0 deletions src/report/report.html
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,8 @@ <h3>{{ 'Import settings' | i18next }}</h3>
<input type="checkbox" ng-model="rCtrl.rim.outreach"></p>

<br />

<label style="float: right">{{ 'Toggle all' | i18next }} <input type="checkbox" ng-checked="rCtrl.checkAllVaccinesToggled()" ng-model="rCtrl.allVaccinesToggled" ng-change="rCtrl.toggleAllVaccines()" /></label>
<label>{{ 'Vaccines' | i18next }}</label>
<table class="table table-bordered"
ng-if="!rCtrl.adm.d"
Expand Down
Loading

0 comments on commit 49f1091

Please sign in to comment.