| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- // SPARKLINE
- // -----------------------------------
- import React, { Component } from 'react';
- import PropTypes from 'prop-types';
- import $ from 'jquery';
- const RESIZE_EVENT = 'resize.sparkline';
- /**
- * Wrapper for for jquery-sparkline plugin
- */
- export default class Sparkline extends Component {
- static propTypes = {
- /** sparkline options object */
- options: PropTypes.object.isRequired,
- /** tag to use, defaults to div */
- tag: PropTypes.string,
- /** values to display, allows array or csv string */
- values: PropTypes.oneOfType([
- PropTypes.string.isRequired,
- PropTypes.array.isRequired
- ])
- }
- static defaultProps = {
- options: {},
- tag: 'div'
- }
- state = {
- values: this.props.values,
- options: this.props.options
- }
- normalizeParams() {
- let { options, values } = this.state;
- options.disableHiddenCheck = true; // allow draw when initially is not visible
- options.type = options.type || 'bar'; // default chart is bar
- values = Array.isArray(values) ? values : values.split(','); // support array of csv strings
- this.setState({ options, values });
- }
- componentDidMount() {
- this.normalizeParams();
- // Sparklines
- require('jquery-sparkline/jquery.sparkline.min.js');
- // init sparkline
- $(this.element).sparkline(this.state.values, this.state.options);
- // allow responsive
- if (this.state.options.resize) {
- $(window).on(RESIZE_EVENT, () => {
- $(this.element).sparkline(this.state.values, this.state.options);
- });
- }
- }
- componentWillUnmount() {
- $(window).off(RESIZE_EVENT);
- $(this.element).sparkline('destroy');
- }
- setRef = node => {
- this.element = node;
- }
- render() {
- const {tag:Tag} = this.props;
- return (
- <Tag ref={this.setRef} {...this.props}></Tag>
- )
- }
- }
|