From 8e71665ec4013f6422d386f7d0775cc601ddd443 Mon Sep 17 00:00:00 2001 From: Pedro Silva Date: Thu, 4 Jan 2024 15:23:01 +0000 Subject: [PATCH] Add status message to feature availability reload. --- .../ppcp-wc-gateway/resources/css/common.scss | 14 ++++++++++ .../resources/js/gateway-settings.js | 28 +++++++++++++++---- .../src/Assets/SettingsPageAssets.php | 4 +++ .../Settings/Fields/connection-tab-fields.php | 2 +- 4 files changed, 42 insertions(+), 6 deletions(-) diff --git a/modules/ppcp-wc-gateway/resources/css/common.scss b/modules/ppcp-wc-gateway/resources/css/common.scss index aa9ec7f43..6ab2f4a56 100644 --- a/modules/ppcp-wc-gateway/resources/css/common.scss +++ b/modules/ppcp-wc-gateway/resources/css/common.scss @@ -25,3 +25,17 @@ .ppcp-button-apm { @include apm-button.button; } + +.ppcp-status-text { + padding-top: 4px; + + .error { + color: red; + font-weight: bold; + } + + .success { + color: green; + font-weight: bold; + } +} diff --git a/modules/ppcp-wc-gateway/resources/js/gateway-settings.js b/modules/ppcp-wc-gateway/resources/js/gateway-settings.js index 7d8132cfa..ed50902e6 100644 --- a/modules/ppcp-wc-gateway/resources/js/gateway-settings.js +++ b/modules/ppcp-wc-gateway/resources/js/gateway-settings.js @@ -355,11 +355,25 @@ document.addEventListener( } // Logic to handle the "Check available features" button. - ((props) => { - const $btn = jQuery(props.button); + (($, props, anchor) => { + const $btn = $(props.button); + + const printStatus = (message, showSpinner) => { + const html = message + (showSpinner ? '' : ''); + $btn.siblings('.ppcp-status-text').html(html); + }; + + // If the reload comes from a successful refresh. + if (typeof URLSearchParams === 'function' && (new URLSearchParams(window.location.search)).get('feature-refreshed')) { + printStatus('✔️ ' + props.messages.success + ''); + $('html, body').animate({ + scrollTop: $(anchor).offset().top + }, 500); + } $btn.click(async () => { $btn.prop('disabled', true); + printStatus(props.messages.waiting, true); const response = await fetch( props.endpoint, @@ -380,14 +394,18 @@ document.addEventListener( const responseData = await response.json(); if (!responseData.success) { - alert(responseData.data.message); + printStatus(responseData.data.message); $btn.prop('disabled', false); } else { - window.location.reload(); + window.location.href += (window.location.href.indexOf('?') > -1 ? '&' : '?') + "feature-refreshed=1#"; } }); - })(PayPalCommerceGatewaySettings.ajax.refresh_feature_status); + })( + jQuery, + PayPalCommerceGatewaySettings.ajax.refresh_feature_status, + '#field-credentials_feature_onboarding_heading' + ); } ); diff --git a/modules/ppcp-wc-gateway/src/Assets/SettingsPageAssets.php b/modules/ppcp-wc-gateway/src/Assets/SettingsPageAssets.php index 5fae9c0c9..e8aa59a7d 100644 --- a/modules/ppcp-wc-gateway/src/Assets/SettingsPageAssets.php +++ b/modules/ppcp-wc-gateway/src/Assets/SettingsPageAssets.php @@ -244,6 +244,10 @@ class SettingsPageAssets { 'endpoint' => \WC_AJAX::get_endpoint( RefreshFeatureStatusEndpoint::ENDPOINT ), 'nonce' => wp_create_nonce( RefreshFeatureStatusEndpoint::nonce() ), 'button' => '.ppcp-refresh-feature-status', + 'messages' => array( + 'waiting' => __( 'Checking features...', 'woocommerce-paypal-payments' ), + 'success' => __( 'Feature status refreshed.', 'woocommerce-paypal-payments' ), + ), ), ), ) diff --git a/modules/ppcp-wc-gateway/src/Settings/Fields/connection-tab-fields.php b/modules/ppcp-wc-gateway/src/Settings/Fields/connection-tab-fields.php index d9513f9c6..b97f59a8f 100644 --- a/modules/ppcp-wc-gateway/src/Settings/Fields/connection-tab-fields.php +++ b/modules/ppcp-wc-gateway/src/Settings/Fields/connection-tab-fields.php @@ -393,7 +393,7 @@ return function ( ContainerInterface $container, array $fields ): array { 'refresh_feature_status' => array( 'title' => __( 'Refresh feature availability status', 'woocommerce-paypal-payments' ), 'type' => 'ppcp-text', - 'text' => '', + 'text' => '
', 'screens' => array( State::STATE_ONBOARDED, ),