1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-14 15:13:29 +01:00
invoiceninja/resources/js/clients/payments/stripe-ach.js
2022-05-19 15:48:31 +10:00

108 lines
3.2 KiB
JavaScript
Vendored

/**
* Invoice Ninja (https://invoiceninja.com)
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://opensource.org/licenses/AAL
*/
class AuthorizeACH {
constructor() {
this.errors = document.getElementById('errors');
this.key = document.querySelector(
'meta[name="stripe-publishable-key"]'
).content;
this.stripe_connect = document.querySelector(
'meta[name="stripe-account-id"]'
)?.content;
}
setupStripe = () => {
if (this.stripeConnect){
// this.stripe.stripeAccount = this.stripeConnect;
this.stripe = Stripe(this.key, {
stripeAccount: this.stripeConnect,
});
}
else {
this.stripe = Stripe(this.key);
}
return this;
};
getFormData = () => {
return {
country: document.getElementById('country').value,
currency: document.getElementById('currency').value,
routing_number: document.getElementById('routing-number').value,
account_number: document.getElementById('account-number').value,
account_holder_name: document.getElementById('account-holder-name')
.value,
account_holder_type: document.querySelector(
'input[name="account-holder-type"]:checked'
).value,
};
};
handleError = (message) => {
document.getElementById('save-button').disabled = false;
document.querySelector('#save-button > svg').classList.add('hidden');
document.querySelector('#save-button > span').classList.remove('hidden');
this.errors.textContent = '';
this.errors.textContent = message;
this.errors.hidden = false;
};
handleSuccess = (response) => {
document.getElementById('gateway_response').value = JSON.stringify(
response
);
document.getElementById('server_response').submit();
};
handleSubmit = (e) => {
if (!document.getElementById('accept-terms').checked) {
errors.textContent = "You must accept the mandate terms prior to making payment.";
errors.hidden = false;
return;
}
document.getElementById('save-button').disabled = true;
document.querySelector('#save-button > svg').classList.remove('hidden');
document.querySelector('#save-button > span').classList.add('hidden');
e.preventDefault();
this.errors.textContent = '';
this.errors.hidden = true;
this.stripe
.createToken('bank_account', this.getFormData())
.then((result) => {
if (result.hasOwnProperty('error')) {
return this.handleError(result.error.message);
}
return this.handleSuccess(result);
});
};
handle() {
document
.getElementById('save-button')
.addEventListener('click', (e) => this.handleSubmit(e));
}
}
new AuthorizeACH().setupStripe().handle();