covid19-dashboard
Version:
Dashboard App displaying COVID-19 numbers by country
96 lines (79 loc) • 2.85 kB
JavaScript
import ComponentController from '../../../node_modules/neo.mjs/src/controller/Component.mjs';
/**
* @class Covid.view.WorldMapContainerController
* @extends Neo.controller.Component
*/
class WorldMapContainerController extends ComponentController {
static getConfig() {return {
/**
* @member {String} className='Covid.view.WorldMapContainerController'
* @protected
*/
className: 'Covid.view.WorldMapContainerController',
/**
* @member {Number} heatRuleChangeDelay=150
*/
heatRuleChangeDelay: 150,
/**
* @member {String|null} heatRuleChangeTimeout=null
*/
heatRuleChangeTimeout: null
}}
changeHeatRule(value) {
const chartId = this.getReference('worldmap').id;
Neo.main.addon.AmCharts.setProperty({
id : this.getReference('worldmap').id,
path : 'series.values.0.heatRules.values.0.maxValue',
value : value
});
Neo.main.addon.AmCharts.callMethod({
id : chartId,
path: 'series.values.0.invalidateData'
});
}
/**
* @param {Object} data
*/
onHeatRuleFieldChange(data) {
const me = this;
clearTimeout(me.heatRuleChangeTimeout);
me.heatRuleChangeTimeout = setTimeout(() => {
me.changeHeatRule(data.value);
}, me.heatRuleChangeDelay);
}
/**
* @param {Object} data
*/
onSeriesButtonClick(data) {
const me = this,
chartId = me.getReference('worldmap').id,
countryData = [...me.getParent().data];
const colorMap = {
active : '#64b5f6',
cases : '#bbbbbb',
deaths : '#fb6767',
recovered: '#28ca68'
};
Neo.main.addon.AmCharts.setProperty({
id : chartId,
isColor: true,
path : 'series.values.0.heatRules.values.0.max',
value : colorMap[data.component.series]
});
Neo.main.addon.AmCharts.setProperty({
id : chartId,
path : 'series.values.0.dataFields.value',
value: data.component.series
});
Neo.main.addon.AmCharts.callMethod({
id : chartId,
path: 'series.values.0.invalidateData'
}).then(() => {
me.getReference('currentMapViewLabel').text = 'Current view: ' + Neo.capitalize(data.component.series);
countryData.sort((a, b) => b[data.component.series] - a[data.component.series]);
me.getReference('heatRuleField').value = Math.ceil(countryData[9][data.component.series] / 100) * 100;
});
}
}
Neo.applyClassConfig(WorldMapContainerController);
export {WorldMapContainerController as default};