mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-06 13:44:42 +08:00
Merge pull request #1941 from woocommerce/PCP-2489-improve-feature-availability-check-ux
Improve feature availability check UX (2489)
This commit is contained in:
commit
1e1cae59a7
7 changed files with 110 additions and 6 deletions
|
@ -25,3 +25,17 @@
|
||||||
.ppcp-button-apm {
|
.ppcp-button-apm {
|
||||||
@include apm-button.button;
|
@include apm-button.button;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ppcp-status-text {
|
||||||
|
padding-top: 4px;
|
||||||
|
|
||||||
|
.error {
|
||||||
|
color: red;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.success {
|
||||||
|
color: green;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -355,11 +355,25 @@ document.addEventListener(
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logic to handle the "Check available features" button.
|
// Logic to handle the "Check available features" button.
|
||||||
((props) => {
|
(($, props, anchor) => {
|
||||||
const $btn = jQuery(props.button);
|
const $btn = $(props.button);
|
||||||
|
|
||||||
|
const printStatus = (message, showSpinner) => {
|
||||||
|
const html = message + (showSpinner ? '<span class="spinner is-active" style="float: none;"></span>' : '');
|
||||||
|
$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('<span class="success">✔️ ' + props.messages.success + '</span>');
|
||||||
|
$('html, body').animate({
|
||||||
|
scrollTop: $(anchor).offset().top
|
||||||
|
}, 500);
|
||||||
|
}
|
||||||
|
|
||||||
$btn.click(async () => {
|
$btn.click(async () => {
|
||||||
$btn.prop('disabled', true);
|
$btn.prop('disabled', true);
|
||||||
|
printStatus(props.messages.waiting, true);
|
||||||
|
|
||||||
const response = await fetch(
|
const response = await fetch(
|
||||||
props.endpoint,
|
props.endpoint,
|
||||||
|
@ -380,14 +394,18 @@ document.addEventListener(
|
||||||
const responseData = await response.json();
|
const responseData = await response.json();
|
||||||
|
|
||||||
if (!responseData.success) {
|
if (!responseData.success) {
|
||||||
alert(responseData.data.message);
|
printStatus(responseData.data.message);
|
||||||
$btn.prop('disabled', false);
|
$btn.prop('disabled', false);
|
||||||
} else {
|
} 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'
|
||||||
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -244,6 +244,10 @@ class SettingsPageAssets {
|
||||||
'endpoint' => \WC_AJAX::get_endpoint( RefreshFeatureStatusEndpoint::ENDPOINT ),
|
'endpoint' => \WC_AJAX::get_endpoint( RefreshFeatureStatusEndpoint::ENDPOINT ),
|
||||||
'nonce' => wp_create_nonce( RefreshFeatureStatusEndpoint::nonce() ),
|
'nonce' => wp_create_nonce( RefreshFeatureStatusEndpoint::nonce() ),
|
||||||
'button' => '.ppcp-refresh-feature-status',
|
'button' => '.ppcp-refresh-feature-status',
|
||||||
|
'messages' => array(
|
||||||
|
'waiting' => __( 'Checking features...', 'woocommerce-paypal-payments' ),
|
||||||
|
'success' => __( 'Feature status refreshed.', 'woocommerce-paypal-payments' ),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
@ -186,4 +186,30 @@ class DCCProductStatus {
|
||||||
return $this->has_request_failure;
|
return $this->has_request_failure;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the persisted result to force a recheck.
|
||||||
|
*
|
||||||
|
* @param Settings|null $settings The settings object.
|
||||||
|
* We accept a Settings object to don't override other sequential settings that are being updated elsewhere.
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function clear( Settings $settings = null ): void {
|
||||||
|
if ( null === $settings ) {
|
||||||
|
$settings = $this->settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unset check stored in memory.
|
||||||
|
$this->current_status_cache = null;
|
||||||
|
|
||||||
|
// Unset settings flag.
|
||||||
|
$settings_key = 'products_dcc_enabled';
|
||||||
|
if ( $settings->has( $settings_key ) ) {
|
||||||
|
$settings->set( $settings_key, false );
|
||||||
|
$settings->persist();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete cached value.
|
||||||
|
$this->cache->delete( self::DCC_STATUS_CACHE_KEY );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -173,4 +173,30 @@ class PayUponInvoiceProductStatus {
|
||||||
return $this->has_request_failure;
|
return $this->has_request_failure;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the persisted result to force a recheck.
|
||||||
|
*
|
||||||
|
* @param Settings|null $settings The settings object.
|
||||||
|
* We accept a Settings object to don't override other sequential settings that are being updated elsewhere.
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function clear( Settings $settings = null ): void {
|
||||||
|
if ( null === $settings ) {
|
||||||
|
$settings = $this->settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unset check stored in memory.
|
||||||
|
$this->current_status_cache = null;
|
||||||
|
|
||||||
|
// Unset settings flag.
|
||||||
|
$settings_key = 'products_pui_enabled';
|
||||||
|
if ( $settings->has( $settings_key ) ) {
|
||||||
|
$settings->set( $settings_key, false );
|
||||||
|
$settings->persist();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete cached value.
|
||||||
|
$this->cache->delete( self::PUI_STATUS_CACHE_KEY );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -393,7 +393,7 @@ return function ( ContainerInterface $container, array $fields ): array {
|
||||||
'refresh_feature_status' => array(
|
'refresh_feature_status' => array(
|
||||||
'title' => __( 'Refresh feature availability status', 'woocommerce-paypal-payments' ),
|
'title' => __( 'Refresh feature availability status', 'woocommerce-paypal-payments' ),
|
||||||
'type' => 'ppcp-text',
|
'type' => 'ppcp-text',
|
||||||
'text' => '<button type="button" class="button ppcp-refresh-feature-status">' . esc_html__( 'Check available features', 'woocommerce-paypal-payments' ) . '</button>',
|
'text' => '<button type="button" class="button ppcp-refresh-feature-status">' . esc_html__( 'Check available features', 'woocommerce-paypal-payments' ) . '</button><div class="ppcp-status-text"></div>',
|
||||||
'screens' => array(
|
'screens' => array(
|
||||||
State::STATE_ONBOARDED,
|
State::STATE_ONBOARDED,
|
||||||
),
|
),
|
||||||
|
|
|
@ -430,6 +430,22 @@ class WCGatewayModule implements ModuleInterface {
|
||||||
$c->get( 'wcgateway.cli.settings.command' )
|
$c->get( 'wcgateway.cli.settings.command' )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Clears product status when appropriate.
|
||||||
|
add_action(
|
||||||
|
'woocommerce_paypal_payments_clear_apm_product_status',
|
||||||
|
function( Settings $settings = null ) use ( $c ): void {
|
||||||
|
$dcc_product_status = $c->get( 'wcgateway.helper.dcc-product-status' );
|
||||||
|
if ( $dcc_product_status instanceof DCCProductStatus ) {
|
||||||
|
$dcc_product_status->clear( $settings );
|
||||||
|
}
|
||||||
|
|
||||||
|
$pui_product_status = $c->get( 'wcgateway.pay-upon-invoice-product-status' );
|
||||||
|
if ( $pui_product_status instanceof PayUponInvoiceProductStatus ) {
|
||||||
|
$pui_product_status->clear( $settings );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue