VGS: Nested Data
by Tommy
HTML
<link rel="stylesheet" href="//stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<script src="https://js.verygoodvault.com/vgs-collect/1/vgs-collect-examples.js"></script>
<div id="app">
TI edit 1
<form id="cc-form">
<div id="cc-name" class="form-group">
<div class="form-control-static">
<span class="fake-input"></span>
</div>
</div>
<div id="cc-number" class="form-group">
<div class="form-control-static">
<span class="fake-input"></span>
</div>
</div>
<div id="cc-cvc" class="form-group">
<div class="form-control-static">
<span class="fake-input"></span>
</div>
</div>
<div id="cc-expiration-date" class="form-group">
<div class="form-control-static">
<span class="fake-input"></span>
</div>
</div>
<button type="submit" class="btn btn-sm btn-primary">Submit
</button>
</form>
<h4>
State
</h4>
<pre><code id="vgs-state">State will be here...</code></pre>
<hr/>
<h4>
Response
</h4>
<pre><code id="card-preview">Response will be here...</code></pre>
</div>
CSS
body {
background: #20262E;
padding: 20px;
font-family: Helvetica;
}
#app {
background: #fff;
border-radius: 4px;
padding: 20px;
transition: all 0.2s;
}
.fake-input iframe {
height: 32px;
max-width: 100%;
border: solid 1px #ccc;
border-radius: 4px;
padding-left: 4px;
}
form {
margin-bottom: 10px;
}
JavaScript
var f = VGSCollect.create('tntq4dwvhri', function(state) {
document.getElementById('vgs-state').innerHTML = JSON.stringify(state, null, 2);
});
f.field('#cc-name .fake-input', {
type: 'text',
name: 'params.name',
placeholder: 'Joe Business',
validations: ['required'],
autoComplete: 'cc-name'
});
f.field('#cc-number .fake-input', {
type: 'card-number',
name: 'params.number',
successColor: '#4F8A10',
errorColor: '#D8000C',
placeholder: '4111 1111 1111 1111',
validations: ['required', 'validCardNumber'],
autoComplete: 'cc-number',
showCardIcon: true
});
f.field('#cc-cvc .fake-input', {
type: 'card-security-code',
name: 'params.cvc',
placeholder: '344',
validations: ['required', 'validCardSecurityCode'],
autoComplete: 'cc-csc'
});
f.field('#cc-expiration-date .fake-input', {
type: 'card-expiration-date',
name: 'params.expirationDate',
placeholder: '01 / 2016',
validations: ['required', 'validCardExpirationDate'],
autoComplete: 'cc-exp'
});
document.getElementById('cc-form')
.addEventListener('submit', function(e) {
e.preventDefault();
f.submit('/post', {
data: {
params: {
someData: '123',
otherData: 'qwerty',
}
},
mapDotToObject: 'merge',
}, function(status, data) {
document.getElementById('card-preview').innerText = JSON.stringify(data.json, null, ' ');
}, function (errors) {
});
}, false);