higlass
Version:
HiGlass Hi-C / genomic / large data viewer
97 lines (85 loc) • 2.26 kB
JSX
// @ts-nocheck
import { rgb as d3rgb } from 'd3-color';
import PropTypes from 'prop-types';
import React from 'react';
import { SketchPicker } from 'react-color';
import reactCSS from 'reactcss';
class SketchInlinePicker extends React.Component {
constructor(props) {
super(props);
const startColor = d3rgb(props.color);
this.state = {
displayColorPicker: false,
color: {
r: startColor.r,
g: startColor.g,
b: startColor.b,
a: startColor.opacity,
},
};
}
handleClick() {
this.setState((prevState) => ({
displayColorPicker: !prevState.displayColorPicker,
}));
}
handleClose() {
this.setState({ displayColorPicker: false });
}
handleChange(color) {
const rgb = color.rgb;
const colorString = `rgba(${rgb.r},${rgb.g},${rgb.b},${rgb.a})`;
this.props.onChange(colorString);
this.setState({ color: color.rgb });
}
render() {
const styles = reactCSS({
default: {
color: {
width: '32px',
height: '14px',
borderRadius: '2px',
background: `rgba(${this.state.color.r}, ${this.state.color.g}, ${this.state.color.b}, ${this.state.color.a})`,
},
swatch: {
padding: '5px',
background: '#fff',
cursor: 'pointer',
borderRadius: '1px',
},
popover: {
position: 'absolute',
zIndex: '2',
},
cover: {
position: 'fixed',
top: '0px',
right: '0px',
bottom: '0px',
left: '0px',
},
},
});
return (
<div>
<div onClick={this.handleClick.bind(this)} style={styles.swatch}>
<div style={styles.color} />
</div>
{this.state.displayColorPicker ? (
<div style={styles.popover}>
<div onClick={this.handleClose.bind(this)} style={styles.cover} />
<SketchPicker
color={this.state.color}
onChange={this.handleChange.bind(this)}
/>
</div>
) : null}
</div>
);
}
}
SketchInlinePicker.propTypes = {
color: PropTypes.string,
onChange: PropTypes.func,
};
export default SketchInlinePicker;