Skip to content

Commit fc6d080

Browse files
Fix - Not being able to create new subscription on safari (#1321)
Co-authored-by: Prajjwal Poudel <iamprazol@gmail.com>
1 parent f87946d commit fc6d080

5 files changed

Lines changed: 57 additions & 3 deletions

File tree

assets/js/modules/membership/admin/subscription.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,49 @@
2323
var selectedPlanData = null;
2424
var billingCycleValue = null;
2525

26+
// Validate required fields manually. The forms use `novalidate` so the
27+
// browser never tries to focus a hidden required control (which throws
28+
// "An invalid form control ... is not focusable" and silently aborts the
29+
// submit in Safari). We still must enforce required fields ourselves so a
30+
// recurring/paid plan can't be saved without a start/expiry date.
31+
function validateRequiredFields($form) {
32+
var firstInvalid = null;
33+
34+
$form.find("[required]").each(function () {
35+
var $field = $(this);
36+
var value = $field.val();
37+
38+
if (value === null || $.trim(String(value)) === "") {
39+
$field.addClass("ur-field-invalid");
40+
if (!firstInvalid) {
41+
firstInvalid = $field;
42+
}
43+
} else {
44+
$field.removeClass("ur-field-invalid");
45+
}
46+
});
47+
48+
if (firstInvalid) {
49+
if (snackbar) {
50+
snackbar.add({
51+
type: "failed",
52+
message:
53+
ur_subscription_data.i18n_required_fields ||
54+
"Please fill in all required fields.",
55+
duration: 5
56+
});
57+
}
58+
// Only focus the field if it is actually visible, to avoid the
59+
// same "not focusable" error we are guarding against.
60+
if (firstInvalid.is(":visible")) {
61+
firstInvalid.trigger("focus");
62+
}
63+
return false;
64+
}
65+
66+
return true;
67+
}
68+
2669
function updatePlanFields(plan) {
2770
if (!plan || !plan.meta_value) {
2871
return;
@@ -189,6 +232,11 @@
189232
"submit",
190233
function (e) {
191234
e.preventDefault();
235+
236+
if (!validateRequiredFields($(this))) {
237+
return;
238+
}
239+
192240
var $btn = $(
193241
'button[form="ur-membership-subscription-create-form"]'
194242
);
@@ -240,6 +288,11 @@
240288
"submit",
241289
function (e) {
242290
e.preventDefault();
291+
292+
if (!validateRequiredFields($(this))) {
293+
return;
294+
}
295+
243296
var $btn = $('button[form="ur-membership-subscription-edit-form"]');
244297

245298
$btn.prop("disabled", true).append(

assets/js/modules/membership/admin/subscription.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

modules/membership/includes/Admin/Subscriptions/Subscriptions.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ public function enqueue_scripts_styles() {
155155
'i18n_update_success' => __( 'Subscription updated successfully.', 'user-registration' ),
156156
'i18n_error' => __( 'An error occurred. Please try again.', 'user-registration' ),
157157
'i18n_network_error' => __( 'Network error. Please check your connection.', 'user-registration' ),
158+
'i18n_required_fields' => __( 'Please fill in all required fields.', 'user-registration' ),
158159
'payment_gateways' => get_option( 'ur_membership_payment_gateways', array() ),
159160
'i18n_prompt_delete_title' => __( 'Delete Subscription', 'user-registration' ),
160161
'i18n_prompt_delete_description' => __( 'Are you sure you want to delete this subscription?', 'user-registration' ),

modules/membership/includes/Admin/Views/subscription-create.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class="button-primary ur-subscription-create-btn">
3939

4040
<div class="ur-membership">
4141
<div class="ur-membership-tab-contents-wrapper ur-subscription">
42-
<form id="ur-membership-subscription-create-form" method="post"
42+
<form id="ur-membership-subscription-create-form" method="post" novalidate
4343
class="ur-membership-subscription-create-form ur-subscription__form">
4444
<?php do_action( 'ur_membership_subscription_create_form_start' ); ?>
4545
<div class="user-registration-card">

modules/membership/includes/Admin/Views/subscription-edit.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ class="button-primary ur-subscription-update-btn">
176176

177177
<div class="ur-membership">
178178
<div class="ur-membership-tab-contents-wrapper ur-subscription">
179-
<form id="ur-membership-subscription-edit-form" method="post" class="ur-subscription__form">
179+
<form id="ur-membership-subscription-edit-form" method="post" novalidate class="ur-subscription__form">
180180
<?php do_action( 'ur_membership_subscription_edit_form_start', $subscription ); ?>
181181
<?php wp_nonce_field( 'ur_membership_subscription', 'security' ); ?>
182182
<input type="hidden" name="id" value="<?php echo esc_attr( $subscription['ID'] ); ?>">

0 commit comments

Comments
 (0)