| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- import $ from 'jquery';
- import React, { Component } from 'react';
- import PropTypes from 'prop-types';
- import deepEqual from 'deep-equal';
- import './chart-flot.scss';
- /**
- * Wrapper component for jquery-flot plugin
- */
- class FlotChart extends Component {
- static propTypes = {
- /** data to display */
- data: PropTypes.array.isRequired,
- /** flot options object */
- options: PropTypes.object.isRequired,
- /** height of the container element */
- height: PropTypes.string,
- /** width of the container element */
- width: PropTypes.string
- }
- static defaultProps = {
- height: null,
- width: '100%'
- }
- componentDidMount() {
- // Flot Charts
- require('flot/jquery.flot.js');
- require('flot/jquery.flot.categories.js');
- require('flot/jquery.flot.pie.js');
- require('flot/jquery.flot.resize.js');
- require('flot/jquery.flot.time.js');
- require('jquery.flot.spline/jquery.flot.spline.js');
- require('jquery.flot.tooltip/js/jquery.flot.tooltip.min.js');
- setTimeout(() => {
- this.drawChart();
- }, 100);
- }
- componentDidUpdate(prevProps) {
- if (!deepEqual(prevProps.data, this.props.data) || !deepEqual(prevProps.options, this.props.options)) {
- this.drawChart();
- }
- }
- componentWillUnmount() {
- $(this.flotElement).data('plot').shutdown();
- }
- drawChart(nextProps) {
- const data = (nextProps && nextProps.data) || this.props.data;
- const options = (nextProps && nextProps.options) || this.props.options;
- $.plot(this.flotElement, data, options);
- }
- setRef = node => {
- this.flotElement = node;
- }
- render() {
- const style = {
- height: this.props.height,
- width: this.props.width
- };
- return (
- <div ref={this.setRef} style={style} {...this.props}/>
- );
- }
- }
- export default FlotChart;
|