houdini/app/javascript/legacy/bank_accounts/create.es6
2020-04-23 14:09:14 -05:00

75 lines
2 KiB
JavaScript
Executable file

// License: LGPL-3.0-or-later
var request = require('../common/super-agent-promise')
var format_err = require('../common/format_response_error')
module.exports = create_bank_account
function create_bank_account(form_data, el) {
return new Promise((resolve, reject) =>{
appl.def('new_bank_account', {loading: true, error: ''})
return confirm_auth(form_data)
.then(tokenize_with_stripe)
.then(create_record)
.then(complete)
.catch(display_err)
})
}
// Post to confirm user's password
function confirm_auth(form_data) {
return request.post('/users/confirm_auth').send({password: form_data.user_password})
.perform()
.then((resp) =>{ return {token: resp.body.token, form: form_data}})
}
// Post to stripe to get back a stripe_bank_account_token
function tokenize_with_stripe(data) {
return new Promise(function(resolve, reject) {
Stripe.bankAccount.createToken(data.form, function(status, resp) {
data.stripe_resp = resp
if(resp.error) reject(resp.error.message)
else resolve(data)
})
})
}
// 'data' must have a stripe response as '.stripe_resp' and a user password confirmation token as '.token
function create_record(data) {
return request.post('/nonprofits/' + app.nonprofit_id + '/bank_account')
.send({
pw_token: data.token,
bank_account: {
stripe_bank_account_token: data.stripe_resp.id,
stripe_bank_account_id: data.stripe_resp.bank_account.id,
name: data.stripe_resp.bank_account.bank_name + ' *' + data.stripe_resp.bank_account.last4,
email: app.user.email
}
})
.perform()
}
function complete() {
appl.is_loading()
appl.reload()
}
function display_err(resp) {
var error_message = null;
if (typeof resp == 'string')
error_message = resp
else
error_message = format_err(resp)
appl.def('new_bank_account', {error: error_message, loading: false})
}