unageanu/jiji2

View on GitHub
sites/src/js/view/components/chart/chart-view.js

Summary

Maintainability
A
1 hr
Test Coverage
import React             from "react"

import AbstractComponent from "../widgets/abstract-component"
import Chart             from "../chart/chart"

import IntervalSelector  from "../chart/interval-selector"
import PairSelector      from "../chart/pair-selector"
import RateView          from "../chart/rate-view"
import Slider            from "../chart/slider"
import LoadingView       from "../widgets/loading-view"

const conpactSelectorStyles = {
  style: {
    height: "32px"
  },
  labelStyle: {
    fontSize: "16px",
    lineHeight: "normal",
    top: "6px"
  },
  iconStyle: {
    top: "4px"
  }
};

export default class ChartView extends AbstractComponent {

  constructor(props) {
    super(props);
    this.state = {};
  }

  render() {
    return (
      <div className="chart-view">
        <div className="menu">
          <PairSelector model={this.props.model} {...conpactSelectorStyles} />
          <IntervalSelector model={this.props.model} {...conpactSelectorStyles} />
        </div>
        <div className="chart">
          <div className="loading">
            <LoadingView xhrManager={
              this.props.model.positionService.xhrManager
            } left={-40} />
          </div>
          <RateView chartModel={this.props.model} />
          <Chart {...this.props} />
        </div>
        {this.createSlider()}
      </div>
    );
  }

  createSlider() {
    if (!this.props.enableSlider) return null;
    return <div className="slider-panel">
      <Slider chartModel={this.props.model}></Slider>
    </div>;
  }

  model() {
    return this.context.application.homePageModel;
  }
}
ChartView.propTypes = {
  devicePixelRatio: React.PropTypes.number.isRequired,
  size: React.PropTypes.object.isRequired,
  model: React.PropTypes.object.isRequired,
  enableSlider: React.PropTypes.bool
};
ChartView.defaultProps = {
  devicePixelRatio: window.devicePixelRatio || 1,
  size: {w:1280-300-16*4, h:600, profitAreaHeight:80},
  enableSlider: true
};