public/js/components/AtomCreate/AtomCreateGenericInfo.js (96 lines of code) (raw):
import React from 'react';
import {PropTypes} from 'prop-types';
import {Link} from 'react-router';
import {getAtomByType, isAtomTypeEditable} from '../../constants/atomData';
import {AtomTypeCard} from '../AtomTypeCard/AtomTypeCard.js';
import FormFieldTextInput from '../FormFields/FormFieldTextInput';
import FormFieldArrayWrapper from '../FormFields/FormFieldArrayWrapper';
import FormFieldTagPicker from '../FormFields/FormFieldTagPicker';
import AtomCreateExternalApp from './AtomCreateExternalApp';
class AtomCreateGenericInfo extends React.Component {
static propTypes = {
routeParams: PropTypes.shape({
atomType: PropTypes.String
}).isRequired,
atomActions: PropTypes.shape({
createAtom: PropTypes.func.isRequired
}).isRequired
};
state = {
title: "",
commissioningDesks: []
};
updateTitle = (newTitle) => {
this.setState({
title: newTitle
});
};
updateTags = (tags) => {
this.setState({
commissioningDesks: tags
});
};
triggerAtomCreate = (e) => {
e.preventDefault();
this.props.atomActions.createAtom(this.props.routeParams.atomType, {
title: this.state.title,
commissioningDesks: this.state.commissioningDesks
});
};
shouldEnableCreateButton = () => {
if (!this.state.title || !this.state.title.length) {
return false;
}
return true;
};
render () {
const atomType = getAtomByType(this.props.routeParams.atomType);
if (!atomType) {
return <div>Unrecognised Atom Type</div>;
}
if (!isAtomTypeEditable(this.props.routeParams.atomType)) {
return <AtomCreateExternalApp atomType={atomType} />;
}
return (
<div className="atom-editor">
<h1 className="atom-editor__title">{`Create new ${this.props.routeParams.atomType}`}</h1>
<div className="atom-editor__section">
<AtomTypeCard atomType={atomType} />
<Link className="atom-editor__switchtype" to="/create">Select different atom</Link>
</div>
<form className="form">
<FormFieldTextInput
fieldLabel="Public title"
fieldName="title"
fieldValue={this.state.title}
fieldPlaceholder="Enter a title for this atom"
onUpdateField={this.updateTitle}
/>
<FormFieldArrayWrapper
onUpdateField={this.updateTags}
fieldName="commissioningDesks"
fieldLabel="Commissioning desks:"
fieldValue={this.state.commissioningDesks}
>
<FormFieldTagPicker tagType="tracking" />
</FormFieldArrayWrapper>
<button className="btn" type="submit" disabled={!this.shouldEnableCreateButton()} onClick={this.triggerAtomCreate}>Create Atom</button>
</form>
</div>
);
}
}
//REDUX CONNECTIONS
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import * as createAtomActions from '../../actions/AtomActions/createAtom.js';
function mapStateToProps(state) {
return {
config: state.config
};
}
function mapDispatchToProps(dispatch) {
return {
atomActions: bindActionCreators(Object.assign({}, createAtomActions), dispatch)
};
}
export default connect(mapStateToProps, mapDispatchToProps)(AtomCreateGenericInfo);