LendUp nested form(React)
by VeryGoodFiddle
HTML
<script src="https://js.verygoodvault.io/vgs-collect/1/vgs-collect-examples.js"></script>
<div id="app"></div>
CSS
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
form {
margin-bottom: 10px;
width: 305px;
}
#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
label {
font-size: 12px;
display: block;
}
.fake-input iframe, input {
height: 32px;
max-width: 100%;
border: solid 1px #ccc;
border-radius: 4px;
padding-left: 4px;
margin-bottom: 5px;
}
input {
margin-bottom: 5px;
height: 30px;
}
.error-message {
width: 100%;
display: block;
text-align: right;
width: 100%;
color: red;
font-size: 10px;
}
React
const initErrorState = {
card_name: '',
card_number: '',
card_cvc: '',
card_exp: '',
}
class CheckoutForm extends React.Component {
constructor(props) {
super(props);
this.form = {};
this.paymentAmount = React.createRef();
this.cardFee = React.createRef();
this.handleSubmit = this.handleSubmit.bind(this);
this.state = {
formErrors: initErrorState,
initValidation: false,
}
}
componentDidMount() {
let that = this;
this.form = VGSCollect.create('tntq4dwvhri', function(state) {
if(that.state.initValidation) {
let form_errors = Object.assign({}, that.state.formErrors);
for(let error in state) {
form_errors[error] = state[error].errorMessages[0];
}
that.setState({formErrors: form_errors});
}
});
this.form.field('#cc-name .fake-input', {
type: 'text',
name: 'card_name',
placeholder: 'Joe Business',
validations: ['required'],
});
this.form.field('#cc-number .fake-input', {
type: 'card-number',
name: 'card_number',
successColor: '#4F8A10',
errorColor: '#D8000C',
placeholder: '4111 1111 1111 1111',
validations: ['required', 'validCardNumber'],
});
this.form.field('#cc-cvc .fake-input', {
type: 'card-security-code',
name: 'card_cvc',
placeholder: '344',
validations: ['required', 'validCardSecurityCode'],
});
this.form.field('#cc-expiration-date .fake-input', {
type: 'card-expiration-date',
name: 'card_exp',
placeholder: '01 / 20',
serializers: [this.form.SERIALIZERS.separate({monthName: 'month', yearName: 'year'})],
validations: ['required', 'validCardExpirationDate']
});
}
handleSubmit(e){
e.preventDefault();
this.setState({ formErrors: initErrorState, initValidation: true});
let that = this;
this.form.submit('/post', {
data: {
paymentAmount:...