Files
old-spike/client/dashboard/energy/graph/graph.component.js
2016-03-05 16:53:29 -06:00

76 lines
2.0 KiB
JavaScript

import React from 'react';
import Templates from 'config/templates';
import CalendarGridChart from './../../../d3/grid/calendar_grid';
import House from './../../../models/house';
class GraphComponent extends React.Component {
componentDidMount(){
var energy_graph = this;
energy_graph.updateGraph();
}
get house(){
return this.props.house;
}
get state_manager(){
return this.props.state_manager;
}
componentDidUpdate(prev_props, prev_state){
var energy_graph = this;
if (prev_props.house != energy_graph.props.house ||
prev_props.year != energy_graph.props.year ||
prev_props.graph_attr != energy_graph.props.graph_attr){
energy_graph.updateGraph();
}
}
updateGraph(){
var energy_graph = this,
graph_attr = energy_graph.props.graph_attr;
if (energy_graph.graph === undefined){
energy_graph.graph = new CalendarGridChart({
container: '#energy_graph',
outer_width: 800,
outer_height: 300,
date_attr: 'day',
color: '#0404B4',
toDate: (energy_datum)=>{ return energy_datum.day_to_date; }
});
jQuery('#energy_graph').tooltip({
selector: '.d3-chart-grid-unit',
container: 'body',
title: function(){
var energy_datum = this.__data__,
date_s = d3.time.format('%a %b %d, %Y')(energy_datum.day_to_date),
range_value = `${Math.round(energy_datum.data[graph_attr])} kWh`;
return `${date_s}: ${range_value}`;
}
});
}
energy_graph.graph.rangeValue = (datum)=>{ return datum.data[graph_attr]; }
energy_graph.graph.drawData({
title: energy_graph.graph_title,
css_class: '',
min_range: 0,
max_range: 150,
values: energy_graph.house.energy_data
});
}
render(){
var energyGraphRt = Templates.forComponent('energy_graph');
return energyGraphRt.call(this);
}
}
GraphComponent.NAME = 'EnergyGraph';
module.exports = GraphComponent;