in stripe/public/javascript/app.js [92:177]
function startDataListeners() {
/**
* Get all payment methods for the logged in customer
*/
firebase
.firestore()
.collection('stripe_customers')
.doc(currentUser.uid)
.collection('payment_methods')
.onSnapshot((snapshot) => {
if (snapshot.empty) {
document.querySelector('#add-new-card').open = true;
}
snapshot.forEach(function (doc) {
const paymentMethod = doc.data();
if (!paymentMethod.card) {
return;
}
const optionId = `card-${doc.id}`;
let optionElement = document.getElementById(optionId);
// Add a new option if one doesn't exist yet.
if (!optionElement) {
optionElement = document.createElement('option');
optionElement.id = optionId;
document
.querySelector('select[name=payment-method]')
.appendChild(optionElement);
}
optionElement.value = paymentMethod.id;
optionElement.text = `${paymentMethod.card.brand} •••• ${paymentMethod.card.last4} | Expires ${paymentMethod.card.exp_month}/${paymentMethod.card.exp_year}`;
});
});
/**
* Get all payments for the logged in customer
*/
firebase
.firestore()
.collection('stripe_customers')
.doc(currentUser.uid)
.collection('payments')
.onSnapshot((snapshot) => {
snapshot.forEach((doc) => {
const payment = doc.data();
let liElement = document.getElementById(`payment-${doc.id}`);
if (!liElement) {
liElement = document.createElement('li');
liElement.id = `payment-${doc.id}`;
}
let content = '';
if (
payment.status === 'new' ||
payment.status === 'requires_confirmation'
) {
content = `Creating Payment for ${formatAmount(
payment.amount,
payment.currency
)}`;
} else if (payment.status === 'succeeded') {
const card = payment.charges.data[0].payment_method_details.card;
content = `✅ Payment for ${formatAmount(
payment.amount,
payment.currency
)} on ${card.brand} card •••• ${card.last4}.`;
} else if (payment.status === 'requires_action') {
content = `🚨 Payment for ${formatAmount(
payment.amount,
payment.currency
)} ${payment.status}`;
handleCardAction(payment, doc.id);
} else {
content = `⚠️ Payment for ${formatAmount(
payment.amount,
payment.currency
)} ${payment.status}`;
}
liElement.innerText = content;
document.querySelector('#payments-list').appendChild(liElement);
});
});
}