Skip to content

Commit

Permalink
Add checkout form validation to subscriptions.
Browse files Browse the repository at this point in the history
  • Loading branch information
pedrosilva-pt committed Dec 15, 2023
1 parent 6491146 commit 7c98f1d
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'formdata-polyfill';
import onApprove from '../OnApproveHandler/onApproveForPayNow.js';
import {payerData} from "../Helper/PayerData";
import {getCurrentPaymentMethod} from "../Helper/CheckoutMethodState";
import validateCheckoutForm from "../Helper/CheckoutFormValidation";

class CheckoutActionHandler {

Expand All @@ -13,7 +14,13 @@ class CheckoutActionHandler {

subscriptionsConfiguration() {
return {
createSubscription: (data, actions) => {
createSubscription: async (data, actions) => {
try {
await validateCheckoutForm(this.config);
} catch (error) {
throw {type: 'form-validation-error'};
}

return actions.subscription.create({
'plan_id': this.config.subscription_plan_id
});
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import Spinner from "./Spinner";
import FormValidator from "./FormValidator";
import ErrorHandler from "../ErrorHandler";

const validateCheckoutForm = function (config) {
return new Promise(async (resolve, reject) => {
try {
const spinner = new Spinner();
const errorHandler = new ErrorHandler(
config.labels.error.generic,
document.querySelector('.woocommerce-notices-wrapper')
);

const formSelector = config.context === 'checkout' ? 'form.checkout' : 'form#order_review';
const formValidator = config.early_checkout_validation_enabled ?
new FormValidator(
config.ajax.validate_checkout.endpoint,
config.ajax.validate_checkout.nonce,
) : null;

if (!formValidator) {
resolve();
return;
}

formValidator.validate(document.querySelector(formSelector)).then((errors) => {
if (errors.length > 0) {
spinner.unblock();
errorHandler.clear();
errorHandler.messages(errors);

// fire WC event for other plugins
jQuery( document.body ).trigger( 'checkout_error' , [ errorHandler.currentHtml() ] );

reject();
} else {
resolve();
}
});

} catch (error) {
console.error(error);
reject();
}
});
}

export default validateCheckoutForm;

0 comments on commit 7c98f1d

Please sign in to comment.