UNPKG

@api-platform/client-generator

Version:

Generate apps built with Next, Nuxt, Quasar, React, React Native, Vue or Vuetify for any API documented using Hydra or OpenAPI

74 lines (65 loc) 1.95 kB
import React, { Component } from 'react'; import { Field, reduxForm } from 'redux-form'; import PropTypes from 'prop-types'; class Form extends Component { static propTypes = { handleSubmit: PropTypes.func.isRequired, error: PropTypes.string }; renderField = data => { data.input.className = 'form-control'; const isInvalid = data.meta.touched && !!data.meta.error; if (isInvalid) { data.input.className += ' is-invalid'; data.input['aria-invalid'] = true; } if (this.props.error && data.meta.touched && !data.meta.error) { data.input.className += ' is-valid'; } return ( <div className={`form-group`}> <label htmlFor={`{{{lc}}}_${data.input.name}`} className="form-control-label" > {data.input.name} </label> <input {...data.input} type={data.type} step={data.step} required={data.required} placeholder={data.placeholder} id={`{{{lc}}}_${data.input.name}`} /> {isInvalid && <div className="invalid-feedback">{data.meta.error}</div>} </div> ); }; render() { return ( <form onSubmit={this.props.handleSubmit}> {{#each formFields}} <Field component={this.renderField} name="{{{name}}}" type="{{{type}}}"{{#if step}} step="{{{step}}}"{{/if}} placeholder="{{{description}}}"{{#if required}} required={true}{{/if}}{{#if reference}}{{#unless maxCardinality}} normalize={v => (v === '' ? [] : v.split(','))}{{/unless}}{{/if}}{{#if number}} normalize={v => parseFloat(v)}{{/if}} /> {{/each}} <button type="submit" className="btn btn-success"> Submit </button> </form> ); } } export default reduxForm({ form: '{{{lc}}}', enableReinitialize: true, keepDirtyOnReinitialize: true })(Form);