Guest User

Untitled

a guest
Aug 2nd, 2017
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, { PureComponent } from 'react'
  2. import PropTypes from 'prop-types'
  3. import { Charts, Resizable, ChartContainer, ChartRow, YAxis, LineChart, Brush } from 'react-timeseries-charts'
  4. import { TimeSeries } from 'pondjs'
  5.  
  6. export default class Chart extends PureComponent {
  7.     static propTypes = {
  8.         height: PropTypes.number,
  9.         margin: PropTypes.number
  10.     }
  11.  
  12.     static defaultProps = {
  13.         height: 500,
  14.         margin: 20
  15.     }
  16.  
  17.     constructor(props) {
  18.         super(props)
  19.         const series1 = new TimeSeries({
  20.             name: 'rating',
  21.             columns: ['time', 'value'],
  22.             points: this.generateData(100, new Date(2017, 6, 1, 18, 30).getTime(), 1000)
  23.         })
  24.         const series2 = new TimeSeries({
  25.             name: 'kek',
  26.             columns: ['time', 'value'],
  27.             points: this.generateData(100, new Date(2017, 6, 1, 18, 30).getTime(), 500)
  28.         })
  29.         this.state = {
  30.             series1,
  31.             series2,
  32.             timeRange: series1.timerange(),
  33.             brushRange: series1.timerange()
  34.         }
  35.     }
  36.  
  37.     randInt(min, max) {
  38.         return Math.floor(Math.random() * ((max - min) + 1)) + min
  39.     }
  40.  
  41.     generateData(n, date, rating) {
  42.         const arr = []
  43.         for (let i = 0; i < n; i += 1) {
  44.             const newPoint = [
  45.                 arr.length ? arr[arr.length - 1][0] + (this.randInt(60, 60 * 24) * 60000) : date,
  46.                 arr.length ? arr[arr.length - 1][1] + this.randInt(-15, 15) : rating
  47.             ]
  48.             arr.push(newPoint)
  49.         }
  50.         return arr
  51.     }
  52.  
  53.     handleTimeRangeChange = (range) => {
  54.         if (range) {
  55.             this.setState({ timeRange: range, brushRange: range })
  56.         }
  57.     }
  58.  
  59.     render() {
  60.         return (
  61.             <div>
  62.                 <Resizable>
  63.                     <ChartContainer
  64.                         enablePanZoom
  65.                         onTimeRangeChanged={this.handleTimeRangeChange}
  66.                         timeRange={this.state.timeRange}>
  67.                         <ChartRow height='300'>
  68.                             <YAxis
  69.                                 id='axis1'
  70.                                 width='60'
  71.                                 min={0}
  72.                                 max={Math.max(this.state.series1.max('value'), this.state.series2.max('value'))}
  73.                                 min={Math.min(this.state.series1.min('value'), this.state.series2.min('value'))}
  74.                                 tickCount={2}
  75.                                 type='linear'/>
  76.                             <Charts>
  77.                                 <LineChart axis='axis1' series={this.state.series1}/>
  78.                                 <LineChart axis='axis1' series={this.state.series2}/>
  79.                             </Charts>
  80.                         </ChartRow>
  81.                     </ChartContainer>
  82.                 </Resizable>
  83.                 <Resizable>
  84.                     <ChartContainer
  85.                         timeRange={this.state.series1.timerange()}>
  86.                         <ChartRow height='70'>
  87.                             <Brush
  88.                 timeRange={this.state.brushRange}
  89.                 allowSelectionClear
  90.                 onTimeRangeChanged={this.handleTimeRangeChange}
  91.                             />
  92.                             <YAxis
  93.                                 id='axis2'
  94.                                 width='60'
  95.                                 max={Math.max(this.state.series1.max('value'), this.state.series2.max('value'))}
  96.                                 min={Math.min(this.state.series1.min('value'), this.state.series2.min('value'))}
  97.                                 tickCount={2}
  98.                                 type='linear'/>
  99.                             <Charts>
  100.                                 <LineChart axis='axis2' series={this.state.series1}/>
  101.                                 <LineChart axis='axis2' series={this.state.series2}/>
  102.                             </Charts>
  103.                         </ChartRow>
  104.                     </ChartContainer>
  105.                 </Resizable>
  106.             </div>
  107.         )
  108.     }
  109. }
Advertisement
Add Comment
Please, Sign In to add comment