| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | import React, { Component } from 'react';import PropTypes from 'prop-types';import $ from 'jquery';import './vector-map.scss';/** Wrapper component for jquery-vectormap plugin */class VectorMap extends Component {    static propTypes = {        /** series entry of options object */        series: PropTypes.object.isRequired,        /** markers entry of options object */        markers: PropTypes.array.isRequired,        /** jvectormap options object */        options: PropTypes.object.isRequired,        /** height of the container element */        height: PropTypes.string    }    static defaultProps = {        height: '300px'    }    componentDidMount() {        // jquery Vector Map        require('ika.jvectormap/jquery-jvectormap-1.2.2.min.js');        require('ika.jvectormap/jquery-jvectormap-world-mill-en.js');        require('ika.jvectormap/jquery-jvectormap-us-mill-en.js');        require('ika.jvectormap/jquery-jvectormap-1.2.2.css');        window.requestAnimationFrame(() => this.drawMap());    }    drawMap() {        this.props.options.markers = this.props.markers;        this.props.options.series = this.props.series;        $(this.mapElement).vectorMap(this.props.options);    }    componentWillUnmount() {        const map = $(this.mapElement).vectorMap('get', 'mapObject');        map.remove()    }    setRef = node => this.mapElement = node    render() {        return (            <div ref={this.setRef} style={{height: this.props.height}}/>        )    }}export default VectorMap;
 |