Level 17
Here's the whole block just in case it's needed.
const stripe = Stripe('{{ env("STRIPE_KEY") }}');
const elements = stripe.elements();
const cardButton = document.getElementById('card-submit');
const errorBlock = document.getElementById('card-errors');
const style = {
base: {
fontSize: '20px',
textTransform: 'lowercase',
color: '#636b6f',
lineHeight: '24px',
fontFamily: 'Montserrat, sans-serif',
fontSmoothing: 'antialiased',
'::placeholder': {
color: '#747d8a',
}
},
invalid: {
color: '#e57373',
':focus': {
color: '#747d8a',
},
}
};
const cardElement = elements.create('card', {style: style});
cardElement.mount('#card-element');
cardButton.classList.add('disabled');
cardButton.setAttribute('disabled', true);
cardElement.addEventListener('change', function(e) {
if (e.error) {
errorBlock.textContent = e.error.message;
} else {
errorBlock.textContent = '';
}
if (e.complete) {
alert('yep it completed');
cardButton.classList.remove('disabled');
cardButton.setAttribute('disabled', false);
}
});
const cardHolderName = document.getElementById('card-holder-name');
const clientSecret = cardButton.dataset.secret;
cardButton.addEventListener('click', async (e) => {
e.preventDefault();
cardButton.classList.add('disabled');
cardButton.setAttribute('disabled', true);
cardButton.textContent = 'Processing ... ';
const { setupIntent, error } = await stripe.confirmCardSetup(
clientSecret, {
payment_method: {
card: cardElement,
billing_details: {
name: cardHolderName.value
}
}
}
);
const form = document.getElementById('payment-form');
const method = document.getElementById('payment-method');
if (error) {
errorBlock.textContent = error.message;
} else {
method.value = setupIntent.payment_method;
form.submit();
}
});