dhis2-gis
Version:
GIS Web App for DHIS 2
117 lines (93 loc) • 4 kB
JavaScript
export default function FeaturePopup(gis, instance) {
// systemSettings is currently not set for plugins
if (gis.init.systemSettings) {
var feature = instance.feature,
generator = gis.init.periodGenerator,
periodType = gis.init.systemSettings.infrastructuralPeriodType.name,
attr = feature.properties,
iig = gis.init.systemSettings.infrastructuralIndicatorGroup || gis.init.systemSettings.indicatorGroups[0] || {},
ideg = gis.init.systemSettings.infrastructuralDataElementGroup || {},
indicators = iig.indicators || [],
dataElements = ideg.dataElements || [],
data = [].concat(indicators, dataElements),
period = generator.filterFuturePeriodsExceptCurrent(generator.generateReversedPeriods(periodType))[0],
paramString = '?',
showWindow,
success,
failure,
getData,
getParamString;
success = function(r) {
var html = '<h2>' + feature.properties.name + '</h2>',
records = [],
dxIndex,
valueIndex;
if (r.rows && r.rows.length) {
// index
for (var i = 0; i < r.headers.length; i++) {
if (r.headers[i].name === 'dx') {
dxIndex = i;
}
if (r.headers[i].name === 'value') {
valueIndex = i;
}
}
// records
for (var i = 0; i < r.rows.length; i++) {
records.push({
name: r.metaData.names[r.rows[i][dxIndex]],
value: r.rows[i][valueIndex]
});
}
gis.util.array.sort(records);
// html
html += '<div style="font-weight: bold; color: #333">' + attr.name + '</div>';
html += '<div style="font-weight: bold; color: #333; padding-bottom: 5px">' + r.metaData.names[period.iso] + '</div>';
for (var i = 0; i < records.length; i++) {
html += records[i].name + ': ' + '<span style="color: #005aa5">' + records[i].value + '</span>' + (i < records.length - 1 ? '<br/>' : '');
}
}
else {
html += 'No data found for:<ul>' +
'<li>Indicators in group: <em>' + iig.name + '</em></li>' +
'<li>Data elements in group: <em>' + ideg.name + '</em></li>' +
'<li>Period: <em>' + period.name + '</em></li>' +
'<p>To change groups, please go to general settings.</p>';
}
instance.bindPopup(html).openPopup();
gis.mask.hide();
};
failure = function(r) {
gis.mask.hide();
};
getData = function(paramString) {
gis.mask.show();
Ext.Ajax.request({
url: encodeURI(gis.init.contextPath + '/api/analytics.json' + paramString),
disableCaching: false,
success: function(r) {
success(JSON.parse(r.responseText));
},
failure: failure
});
};
getParamString = function(data) {
// data
paramString += 'dimension=dx:';
for (var i = 0; i < data.length; i++) {
paramString += data[i].id + (i < data.length - 1 ? ';' : '');
}
// period
paramString += '&filter=pe:' + period.iso;
// orgunit
paramString += '&dimension=ou:' + attr.id;
getData(paramString);
};
// init
if (!data.length) {
showWindow('No indicator or data element groups found.');
return;
}
getParamString(data);
}
};