Чтобы ChromePicker работал (перемещая полосу тона и круг внутри «большого квадрата», необходимо добавить функцию onChange
и приклеить ее к onHandleChange
.
Также внутри onHandleChangeComplete
, цвет должен быть взят не из состояния, а из параметра функции, colors
:
import React from 'react'; import {Button, Icon} из 'semanti c -ui-react '; импортировать {ChromePicker} из' response-color '; импортировать {connect} из' response-redux '; импортировать {Creators} из' ../../actions';
class Banner extends React.PureComponent {
constructor(props) {
super(props);
this.state = {
displayColorPicker: false,
};
}
handleClick = () => {
this.setState({ displayColorPicker: true });
};
handleClose = () => {
this.setState({ displayColorPicker: false });
};
handleChange2 = colors => {
this.setState({ background: colors.hex });
};
handleChangeComplete = colors => {
this.setState({ background: colors.hex });
const {
name,
} = this.state;
const color = colors.hex;
this.setState({ color: colors.hex });
const { updateCompany } = this.props;
updateCompany(this.props.company._id, {
name,
color,
});
};
render() {
this.props.color.color.color = this.state.color;
const popover = { // this is not essential, it's some styling for the picker
position: 'absolute',
zIndex: '2',
};
const cover = { // same as for popover
position: 'fixed',
top: '0px',
right: '0px',
bottom: '0px',
left: '0px',
};
const {company } = this.props; // gets the company from props
return (
<div className="banner-container settings-banner">
<div style={{ backgroundColor: this.state.color }}>
<div>
<Button
className="select-color-btn"
onClick={this.handleClick}>
Select a color
</Button>
{this.state.displayColorPicker ? (
<div style={popover}>
<div
style={cover}
onClick={this.handleClose}
onKeyDown={this.handleClick}
role="button"
tabIndex="0"
aria-label="Save"
/>
<ChromePicker
color={this.state.background}
onChange={this.handleChange2}
onChangeComplete={this.handleChangeComplete}
/>
</div>
) : null}
</div>
</div>
</div>
);
}
}
const mapStateToProps = state => ({
company: state.companies.selectedCompany,
});
const mapDispatchToProps = {
updateCompany: Creators.updateCompanyRequest,
};
export default connect(mapStateToProps, mapDispatchToProps)(Banner);