Files
openfoodnetwork/app/webpacker/controllers/stripe_cards_controller.js
Jean-Baptiste Bellet 7320a1714c Instead of selecting the controller, send an event handled by stripe-cards
Using a query selector to find controller in order to call method could be dangerous as the DOM can change. Using an event should be more robust.
2023-01-18 17:40:17 +01:00

45 lines
1.2 KiB
JavaScript

import { Controller } from "stimulus";
// Handles form elements for selecting previously saved Stripe cards from a list of cards
export default class extends Controller {
static targets = ["stripeelements", "select"];
connect() {
this.initSelectedCard();
document.addEventListener("stripecards:initSelectedCard", (e) => {
if (e.detail == `paymentmethod${this.element.dataset.paymentid}`) {
this.initSelectedCard();
}
});
}
initSelectedCard() {
if (this.hasSelectTarget) {
this.selectCard(this.selectTarget.value);
}
}
onSelectCard(event) {
this.selectCard(event.target.value);
}
selectCard(cardValue) {
if (cardValue == "") {
this.stripeelementsTarget.style.display = "block";
this.getFormElementsArray(this.stripeelementsTarget).forEach((i) => {
i.disabled = false;
});
} else {
this.stripeelementsTarget.style.display = "none";
this.getFormElementsArray(this.stripeelementsTarget).forEach((i) => {
i.disabled = true;
});
}
}
getFormElementsArray(container) {
return Array.from(container.querySelectorAll("input, select, textarea"));
}
}