public/js/components/AtomEmbed/CreateTargetForm.js (89 lines of code) (raw):

import React from 'react'; import {PropTypes} from 'prop-types'; import {createTarget} from '../../services/TargetingApi'; import {ManagedForm, ManagedField} from '../ManagedEditor'; import FormFieldTextInput from '../FormFields/FormFieldTextInput'; import FormFieldTagPicker from '../FormFields/FormFieldTagPicker'; import FormFieldDateInput from '../FormFields/FormFieldDateInput'; import FormFieldArrayWrapper from '../FormFields/FormFieldArrayWrapper'; class CreateTargetForm extends React.Component { static propTypes = { atomPath: PropTypes.string.isRequired, title: PropTypes.string.isRequired, triggerTargetFetch: PropTypes.func.isRequired, toggleEditMode: PropTypes.func.isRequired }; state = { creating: false, currentTarget: {}, formHasError: true }; UNSAFE_componentWillMount() { if (!this.state.currentTarget.title) { this.setState({ currentTarget: { title: this.props.title } }); } } createTarget = () => { this.setState({ creating: true }); const target = Object.assign({}, this.state.currentTarget, { url: this.props.atomPath }); createTarget(target).then((response) => { if (response.status === 200) { this.props.triggerTargetFetch(); this.props.toggleEditMode(); this.setState({ creating: false }); } }); }; updateCurrentTarget = (newTarget) => { this.setState({ currentTarget: newTarget }); }; updateFormErrorState = (errorState) => { this.setState({ formHasError: errorState }); }; render() { return ( <div className="targeting__form"> <ManagedForm data={this.state.currentTarget} updateData={this.updateCurrentTarget} onFormErrorStateUpdate={this.updateFormErrorState} formName="targetingForm" > <ManagedField fieldLocation="title" name="Title" isRequired={true}> <FormFieldTextInput/> </ManagedField> <ManagedField fieldLocation="tagPaths" name="Target Tag" isRequired={true} > <FormFieldArrayWrapper> <FormFieldTagPicker/> </FormFieldArrayWrapper> </ManagedField> <ManagedField fieldLocation="activeUntil" name="Active Until" isRequired={true}> <FormFieldDateInput/> </ManagedField> </ManagedForm> <button className="btn" disabled={this.state.formHasError || this.state.creating} onClick={this.createTarget} > {this.state.creating ? "Creating..." : "Finish"} </button> </div> ); } } export default CreateTargetForm;