public/components/Pillar/Display.react.js (77 lines of code) (raw):
import React from 'react';
import PillarEdit from './PillarEdit.react';
import PillarSections from './PillarSections/PillarSections.react';
import SaveButton from '../utils/SaveButton.react';
import ConfirmButton from '../utils/ConfirmButton.react';
class PillarDisplay extends React.Component {
constructor(props) {
super(props);
this.isPillarDirty = this.isPillarDirty.bind(this);
}
componentDidMount() {
if (!this.props.pillar || this.props.pillar.id !== parseInt(this.props.routeParams.pillarId, 10)) {
this.props.pillarActions.getPillar(this.props.routeParams.pillarId);
}
if (!this.props.sections || !this.props.sections.length) {
this.props.sectionActions.getSections();
}
}
isPillarDirty() {
return this.props.saveState === 'SAVE_STATE_DIRTY';
}
resetPillar() {
this.props.pillarActions.getPillar(this.props.routeParams.pillarId);
}
savePillar() {
this.props.pillarActions.savePillar(this.props.pillar);
}
deletePillar() {
this.props.pillarActions.deletePillar(this.props.pillar);
}
render () {
if (!this.props.pillar || this.props.pillar.id !== parseInt(this.props.routeParams.pillarId, 10)) {
return (
<div>Fetching pillar...</div>
);
}
return (
<div className="pillar-edit">
<div className="pillar-edit__column--sidebar">
<PillarEdit pillar={this.props.pillar} updatePillar={this.props.pillarActions.updatePillar} pathLocked={true} />
<div>
<ConfirmButton className="pillar__delete" onClick={this.deletePillar.bind(this)} buttonText="Delete Pillar" />
</div>
</div>
<div className="pillar-edit__column">
<PillarSections sections={this.props.sections} pillar={this.props.pillar} updatePillar={this.props.pillarActions.updatePillar}/>
</div>
<div className="pillar-edit__column"></div>
<SaveButton isHidden={!this.isPillarDirty()} onSaveClick={this.savePillar.bind(this)} onResetClick={this.resetPillar.bind(this)}/>
</div>
);
}
}
//REDUX CONNECTIONS
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import * as getPillar from '../../actions/PillarsActions/getPillar';
import * as updatePillar from '../../actions/PillarsActions/updatePillar';
import * as savePillar from '../../actions/PillarsActions/savePillar';
import * as deletePillar from '../../actions/PillarsActions/deletePillar';
import * as showError from '../../actions/UIActions/showError';
import * as getSections from '../../actions/SectionsActions/getSections';
function mapStateToProps(state) {
return {
pillar: state.pillar,
config: state.config,
saveState: state.saveState,
sections: state.sections
};
}
function mapDispatchToProps(dispatch) {
return {
pillarActions: bindActionCreators(Object.assign({}, getPillar, updatePillar, savePillar, deletePillar), dispatch),
sectionActions: bindActionCreators(Object.assign({}, getSections), dispatch),
uiActions: bindActionCreators(Object.assign({}, showError), dispatch)
};
}
export default connect(mapStateToProps, mapDispatchToProps)(PillarDisplay);