static-cms/src/components/EntryEditor.js

72 lines
1.9 KiB
JavaScript
Raw Normal View History

2016-05-30 16:55:32 -07:00
import React from 'react';
import Immutable from 'immutable';
2016-05-30 16:55:32 -07:00
import ControlPane from './ControlPane';
import PreviewPane from './PreviewPane';
export default class EntryEditor extends React.Component {
constructor(props) {
super(props);
this.state = {
entry: props.entry,
mediaFiles: Immutable.List()
};
2016-05-30 16:55:32 -07:00
this.handleChange = this.handleChange.bind(this);
this.handleAddMedia = this.handleAddMedia.bind(this);
2016-06-07 11:38:19 -03:00
this.handleRemoveMedia = this.handleRemoveMedia.bind(this);
this.handleSave = this.handleSave.bind(this);
2016-05-30 16:55:32 -07:00
}
handleChange(entry) {
this.setState({entry: entry});
}
handleAddMedia(mediaFile) {
this.setState({mediaFiles: this.state.mediaFiles.push(mediaFile)});
}
2016-06-07 11:38:19 -03:00
handleRemoveMedia(mediaFile) {
const newState = this.state.mediaFiles.filterNot((item) => item === mediaFile);
this.state = {
entry: this.props.entry,
mediaFiles: Immutable.List(newState)
};
}
handleSave() {
this.props.onPersist(this.state.entry, this.state.mediaFiles);
}
2016-05-30 16:55:32 -07:00
render() {
const { collection, entry } = this.props;
return <div>
<h1>Entry in {collection.get('label')}</h1>
<h2>{entry && entry.get('title')}</h2>
<div className="cms-container" style={styles.container}>
<div className="cms-control-pane" style={styles.pane}>
<ControlPane
collection={collection}
entry={this.state.entry}
onChange={this.handleChange}
onAddMedia={this.handleAddMedia}
2016-06-07 11:38:19 -03:00
onRemoveMedia={this.handleRemoveMedia}
/>
2016-05-30 16:55:32 -07:00
</div>
<div className="cms-preview-pane" style={styles.pane}>
2016-05-30 16:55:32 -07:00
<PreviewPane collection={collection} entry={this.state.entry}/>
</div>
</div>
<button onClick={this.handleSave}>Save</button>
2016-05-30 17:13:40 -07:00
</div>;
2016-05-30 16:55:32 -07:00
}
}
const styles = {
container: {
display: 'flex'
},
pane: {
width: '50%'
}
};