useless-stuff
5/7/2016 - 10:40 PM

JS unstyled RGB color selector with React

JS unstyled RGB color selector with React

import React from 'react';
import ReactDOM from 'react-dom';

class ColorSelector extends React.Component {
    constructor() {
        super();
        this.state = {
            red: 0,
            green: 0,
            blue: 0
        }
        this.update = this.update.bind(this)
    }

    update(e) {
        this.setState({
            red: ReactDOM.findDOMNode(this.refs.red.refs.inp).value,
            green: ReactDOM.findDOMNode(this.refs.green.refs.inp).value,
            blue: ReactDOM.findDOMNode(this.refs.blue.refs.inp).value
        });
    }

    render() {
        return (
            <div className="color-picker-container">
                <h5 className="color-picker-label">{this.props.label}</h5>
                <ColorBoxPreview 
                  box_width={this.props.box_width} 
                  box_height={this.props.box_height} 
                  red={this.state.red}
                  green={this.state.green} 
                  blue={this.state.blue}
                />
                <ul className="color-picker-controls">
                    <li>
                        <Slider ref="red" update={this.update} default={this.state.red}/>
                        {this.state.red}
                    </li>
                    <li>
                        <Slider ref="green" update={this.update} default={this.state.green}/>
                        {this.state.green}
                    </li>
                    <li>
                        <Slider ref="blue" update={this.update} default={this.state.blue}/>
                        {this.state.blue}
                    </li>
                </ul>
            </div>
        )
    }
};

class Slider extends React.Component {
    render() {
        return (
            <div>
                <input ref="inp" type="range" min="0" max="255" value={this.props.default} onChange={this.props.update}/>
            </div>
        )
    }
}

class ColorBoxPreview extends React.Component {
    render() {
        let color = "rgb(" + this.props.red + "," + this.props.green + "," + this.props.blue + ")";
        return (
            <div>
                <div style={{
                    "height":this.props.box_height,
                    "width":this.props.box_width,
                    "background":color
                    }}>
                </div>
            </div>
        )
    }
}

ColorSelector.propTypes = {
    box_width: React.PropTypes.string.isRequired,
    box_height: React.PropTypes.string.isRequired,
};
ColorSelector.defaultProps = {
    label: "Select color"
};
ReactDOM.render(
    <ColorSelector box_width="130px" box_height="130px"/>,
    document.getElementById('container')
);