| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- /* global Morris */
- import React, { Component } from 'react';
- import PropTypes from 'prop-types';
- /**
- * Wrapper for morris chart plugin
- */
- class MorrisChart extends Component {
- static propTypes = {
- /** id of the container element */
- id: PropTypes.string.isRequired,
- /** data to display */
- data: PropTypes.array.isRequired,
- /** morris option object */
- options: PropTypes.object.isRequired,
- /** chart type */
- type: PropTypes.oneOf(['Line', 'Area', 'Donut', 'Bar']).isRequired
- };
- componentDidMount() {
- // Morris.js
- require('morris.js.so/morris.js');
- require('morris.js.so/morris.css');
- window.requestAnimationFrame(() => this.drawChart());
- }
- drawChart() {
- const element = { element: this.props.id };
- const data = { data: this.props.data };
- this.chart = new Morris[this.props.type]({
- ...element,
- ...data,
- ...this.props.options
- });
- }
- render() {
- return <div id={this.props.id} />;
- }
- }
- export default MorrisChart;
|