public/js/components/ExternalAtom/ExternalAtom.js (60 lines of code) (raw):
import React from 'react';
import {PropTypes} from 'prop-types';
import {atomPropType} from '../../constants/atomPropType.js';
import {getAtomEditorUrl} from '../../util/atomDataExtractors';
import _capitalize from 'lodash/fp/capitalize';
import AtomEditHeader from '../AtomEdit/AtomEditHeader';
class ExternalAtom extends React.Component {
static propTypes = {
routeParams: PropTypes.shape({
atomType: PropTypes.string.isRequired,
id: PropTypes.string.isRequired
}),
externalAtom: atomPropType,
externalAtomActions: PropTypes.shape({
getExternalAtom: PropTypes.func.isRequired
})
};
UNSAFE_componentWillMount() {
this.props.externalAtomActions.getExternalAtom(this.props.routeParams.atomType, this.props.routeParams.id);
}
renderEditorLink = (atom) => {
return (
<div>
<p>Due to the complexity of this atom, it cannot be created from within the Atom Workshop directly.</p>
<a target="_blank" rel="noreferrer" href={getAtomEditorUrl(atom)} className="link">Open dedicated {_capitalize(atom.atomType)} atom editor</a>
</div>
);
};
render () {
if(!this.props.externalAtom) {
return (
<div className="page__section page__section--centered">
<p>Loading...</p>
</div>
);
}
return (
<div className="atom-editor">
<AtomEditHeader atom={this.props.externalAtom}/>
<div className="atom-editor__form">
{this.renderEditorLink(this.props.externalAtom)}
</div>
</div>
);
}
}
//REDUX CONNECTIONS
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import * as externalAtomActions from '../../actions/ExternalAtomActions/getExternalAtom';
function mapStateToProps(state) {
return {
externalAtom: state.externalAtom
};
}
function mapDispatchToProps(dispatch) {
return {
externalAtomActions: bindActionCreators(Object.assign({}, externalAtomActions), dispatch)
};
}
export default connect(mapStateToProps, mapDispatchToProps)(ExternalAtom);