Skip to content
Snippets Groups Projects
dot-and-line.js 1.6 KiB
Newer Older
import React, { Component } from 'react'
import { Path, Shape } from 'react-native/Libraries/ART/ReactNativeART'
import styles from './styles'
Julia Friesel's avatar
Julia Friesel committed
import config from '../../config'

export default class DotAndLine extends Component {
  shouldComponentUpdate(newProps) {
    return Object.keys(newProps).some(key => newProps[key] != this.props[key])
  }

  render() {
    const y = this.props.y
    const exclude = this.props.exclude
    let lineToRight
    let lineToLeft

    if (this.props.leftY) {
      const middleY = ((this.props.leftY - y) / 2) + y
      const excludedLine = this.props.leftTemperatureExclude || exclude
      lineToLeft = makeLine(y, middleY, 0, excludedLine)
    }
    if (this.props.rightY) {
      const middleY = ((y - this.props.rightY) / 2) + this.props.rightY
      const excludedLine = this.props.rightTemperatureExclude || exclude
      lineToRight = makeLine(y, middleY, config.columnWidth, excludedLine)
    }

    const dotStyle = exclude ? styles.curveDotsExcluded : styles.curveDots
    const radius = dotStyle.r
    const dot = (
      <Shape
        d={new Path()
          .moveTo(config.columnMiddle, y - radius)
          .arc(0, radius * 2, radius)
          .arc(0, radius * -2, radius)
        }
        fill={dotStyle.fill}
      />
    )
    return [lineToLeft, lineToRight, dot]
  }
}

function makeLine(currY, middleY, x, excludeLine) {
  const lineStyle = excludeLine ? styles.curveExcluded : styles.curve

  return <Shape
    stroke={lineStyle.stroke}
    d={new Path()
      .moveTo(config.columnMiddle, currY)
      .lineTo(x, middleY)
    }
    key={x.toString()}
  />