spee.ch/react/components/PublishMetadataInputs.jsx

97 lines
3.6 KiB
React
Raw Normal View History

2018-01-06 03:26:57 +01:00
import React from 'react';
2018-01-10 22:10:08 +01:00
import { connect } from 'react-redux';
import { updateMetadata } from '../actions';
2018-01-06 03:26:57 +01:00
class MetadataInputs extends React.Component {
constructor (props) {
super(props);
this.state = {
2018-01-10 22:10:08 +01:00
showInputs: false,
2018-01-06 03:26:57 +01:00
};
this.toggleShowInputs = this.toggleShowInputs.bind(this);
2018-01-08 18:39:59 +01:00
this.handleInput = this.handleInput.bind(this);
2018-01-10 22:10:08 +01:00
this.handleCheck = this.handleCheck.bind(this);
2018-01-09 02:06:31 +01:00
this.handleSelection = this.handleSelection.bind(this);
2018-01-06 03:26:57 +01:00
}
toggleShowInputs () {
2018-01-10 22:10:08 +01:00
this.setState({'showInputs': !this.state.showInputs});
2018-01-06 03:26:57 +01:00
}
2018-01-08 18:39:59 +01:00
handleInput (event) {
event.preventDefault();
2018-01-10 22:10:08 +01:00
const name = event.target.name;
const value = event.target.value;
this.props.onMetadataChange(name, value);
}
handleCheck (event) {
console.log('handle input', event);
event.preventDefault();
const name = event.target.name;
const value = event.target.checked;
this.props.onMetadataChange(name, value);
2018-01-08 18:39:59 +01:00
}
2018-01-09 02:06:31 +01:00
handleSelection (event) {
2018-01-10 22:10:08 +01:00
const name = event.target.name;
2018-01-09 02:06:31 +01:00
const selectedOption = event.target.selectedOptions[0].value;
2018-01-10 22:10:08 +01:00
this.props.onMetadataChange(name, selectedOption);
2018-01-09 02:06:31 +01:00
}
2018-01-06 03:26:57 +01:00
render () {
return (
<div>
2018-01-10 22:10:08 +01:00
<div className="column column--10">
<a className="label link--primary" id="publish-details-toggle" href="#" onClick={this.toggleShowInputs}>{this.state.showInputs ? '[less]' : '[more]'}</a>
</div>
2018-01-08 18:39:59 +01:00
{this.state.showInputs && (
<div id="publish-details" className="row row--padded row--wide">
<div className="row row--no-top">
<div className="column column--3 column--med-10 align-content-top">
<label htmlFor="publish-license" className="label">Description:</label>
</div><div className="column column--7 column--sml-10">
2018-01-09 02:06:31 +01:00
<textarea rows="1" id="publish-description" className="textarea textarea--primary textarea--full-width" name="description" placeholder="Optional description" value={this.props.description} onChange={this.handleInput} />
2018-01-08 18:39:59 +01:00
</div>
</div>
<div className="row row--no-top">
<div className="column column--3 column--med-10">
<label htmlFor="publish-license" className="label">License:</label>
</div><div className="column column--7 column--sml-10">
2018-01-10 22:10:08 +01:00
<select type="text" name="license" id="publish-license" className="select select--primary" onChange={this.handleSelection}>
2018-01-08 18:39:59 +01:00
<option value=" ">Unspecified</option>
<option value="Public Domain">Public Domain</option>
<option value="Creative Commons">Creative Commons</option>
</select>
</div>
</div>
<div className="row row--no-top">
<div className="column column--3">
<label htmlFor="publish-nsfw" className="label">Mature:</label>
</div><div className="column column--7">
2018-01-10 22:10:08 +01:00
<input className="input-checkbox" type="checkbox" id="publish-nsfw" name="nsfw" checked={this.props.nsfw} onChange={this.handleCheck} />
2018-01-08 18:39:59 +01:00
</div>
</div>
2018-01-06 03:26:57 +01:00
</div>
2018-01-08 18:39:59 +01:00
)}
2018-01-06 03:26:57 +01:00
</div>
);
}
}
2018-01-10 22:10:08 +01:00
const mapStateToProps = state => {
return {
description: state.metadata.description,
license : state.metadata.license,
nsfw : state.metadata.nsfw,
};
};
const mapDispatchToProps = dispatch => {
return {
onMetadataChange: (name, value) => {
dispatch(updateMetadata(name, value));
},
};
};
export default connect(mapStateToProps, mapDispatchToProps)(MetadataInputs);