184 lines
4.8 KiB
TypeScript
184 lines
4.8 KiB
TypeScript
|
/**
|
|||
|
* External dependencies
|
|||
|
*/
|
|||
|
import { useState } from '@wordpress/element';
|
|||
|
import { __, sprintf } from '@wordpress/i18n';
|
|||
|
import { PaymentGateway } from '@woocommerce/data';
|
|||
|
import { WooPaymentMethodsLogos } from '@woocommerce/onboarding';
|
|||
|
|
|||
|
/**
|
|||
|
* Internal dependencies
|
|||
|
*/
|
|||
|
import { getAdminSetting } from '~/utils/admin-settings';
|
|||
|
import sanitizeHTML from '~/lib/sanitize-html';
|
|||
|
import { WCPayInstallButton } from './wcpay-install-button';
|
|||
|
|
|||
|
export const PaymentMethod = ( {
|
|||
|
id,
|
|||
|
enabled,
|
|||
|
title,
|
|||
|
method_title,
|
|||
|
method_description,
|
|||
|
settings_url,
|
|||
|
}: PaymentGateway ) => {
|
|||
|
const isWooPayEligible = getAdminSetting( 'isWooPayEligible', false );
|
|||
|
const [ isEnabled, setIsEnabled ] = useState( enabled );
|
|||
|
const [ isLoading, setIsLoading ] = useState( false );
|
|||
|
|
|||
|
const toggleEnabled = async ( e: React.MouseEvent ) => {
|
|||
|
e.preventDefault();
|
|||
|
setIsLoading( true );
|
|||
|
|
|||
|
if ( ! window.woocommerce_admin.nonces?.gateway_toggle ) {
|
|||
|
// eslint-disable-next-line no-console
|
|||
|
console.warn( 'Unexpected error: Nonce not found' );
|
|||
|
// Redirect to payment setting page if nonce is not found. Users should still be able to toggle the payment method from that page.
|
|||
|
window.location.href = settings_url;
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
try {
|
|||
|
const response = await fetch( window.woocommerce_admin.ajax_url, {
|
|||
|
method: 'POST',
|
|||
|
headers: {
|
|||
|
'Content-Type': 'application/x-www-form-urlencoded',
|
|||
|
},
|
|||
|
body: new URLSearchParams( {
|
|||
|
action: 'woocommerce_toggle_gateway_enabled',
|
|||
|
security: window.woocommerce_admin.nonces?.gateway_toggle,
|
|||
|
gateway_id: id,
|
|||
|
} ),
|
|||
|
} );
|
|||
|
|
|||
|
const result = await response.json();
|
|||
|
|
|||
|
if ( result.success ) {
|
|||
|
if ( result.data === true ) {
|
|||
|
setIsEnabled( true );
|
|||
|
} else if ( result.data === false ) {
|
|||
|
setIsEnabled( false );
|
|||
|
} else if ( result.data === 'needs_setup' ) {
|
|||
|
window.location.href = settings_url;
|
|||
|
}
|
|||
|
} else {
|
|||
|
window.location.href = settings_url;
|
|||
|
}
|
|||
|
} catch ( error ) {
|
|||
|
// eslint-disable-next-line no-console
|
|||
|
console.error( 'Error toggling gateway:', error );
|
|||
|
} finally {
|
|||
|
setIsLoading( false );
|
|||
|
}
|
|||
|
};
|
|||
|
|
|||
|
return (
|
|||
|
<tr data-gateway_id={ id }>
|
|||
|
<td className="sort ui-sortable-handle" width="1%"></td>
|
|||
|
<td className="name" width="">
|
|||
|
<div className="wc-payment-gateway-method__name">
|
|||
|
<a
|
|||
|
href={ settings_url }
|
|||
|
className="wc-payment-gateway-method-title"
|
|||
|
>
|
|||
|
{ method_title }
|
|||
|
</a>
|
|||
|
{ id !== 'pre_install_woocommerce_payments_promotion' &&
|
|||
|
method_title !== title && (
|
|||
|
<span className="wc-payment-gateway-method-name">
|
|||
|
–
|
|||
|
{ title }
|
|||
|
</span>
|
|||
|
) }
|
|||
|
{ id === 'pre_install_woocommerce_payments_promotion' && (
|
|||
|
<div className="pre-install-payment-gateway__subtitle">
|
|||
|
<WooPaymentMethodsLogos
|
|||
|
isWooPayEligible={ isWooPayEligible }
|
|||
|
maxElements={ 5 }
|
|||
|
/>
|
|||
|
</div>
|
|||
|
) }
|
|||
|
</div>
|
|||
|
</td>
|
|||
|
<td className="status" width="1%">
|
|||
|
<a
|
|||
|
className="wc-payment-gateway-method-toggle-enabled"
|
|||
|
href={ settings_url }
|
|||
|
onClick={ toggleEnabled }
|
|||
|
>
|
|||
|
<span
|
|||
|
className={ `woocommerce-input-toggle ${
|
|||
|
isEnabled
|
|||
|
? 'woocommerce-input-toggle--enabled'
|
|||
|
: 'woocommerce-input-toggle--disabled'
|
|||
|
} ${
|
|||
|
isLoading ? 'woocommerce-input-toggle--loading' : ''
|
|||
|
}` }
|
|||
|
/* translators: %s: payment method title */
|
|||
|
aria-label={
|
|||
|
isEnabled
|
|||
|
? sprintf(
|
|||
|
/* translators: %s: payment method title */
|
|||
|
__(
|
|||
|
'The "%s" payment method is currently enabled',
|
|||
|
'woocommerce'
|
|||
|
),
|
|||
|
method_title
|
|||
|
)
|
|||
|
: sprintf(
|
|||
|
/* translators: %s: payment method title */
|
|||
|
__(
|
|||
|
'The "%s" payment method is currently disabled',
|
|||
|
'woocommerce'
|
|||
|
),
|
|||
|
method_title
|
|||
|
)
|
|||
|
}
|
|||
|
>
|
|||
|
{ isEnabled
|
|||
|
? __( 'Yes', 'woocommerce' )
|
|||
|
: __( 'No', 'woocommerce' ) }
|
|||
|
</span>
|
|||
|
</a>
|
|||
|
</td>
|
|||
|
<td
|
|||
|
className="description"
|
|||
|
width=""
|
|||
|
dangerouslySetInnerHTML={ sanitizeHTML( method_description ) }
|
|||
|
/>
|
|||
|
<td className="action" width="1%">
|
|||
|
{ id === 'pre_install_woocommerce_payments_promotion' ? (
|
|||
|
<WCPayInstallButton />
|
|||
|
) : (
|
|||
|
<a
|
|||
|
className="button alignright"
|
|||
|
aria-label={
|
|||
|
enabled
|
|||
|
? sprintf(
|
|||
|
/* translators: %s: payment method title */
|
|||
|
__(
|
|||
|
'Manage the "%s" payment method',
|
|||
|
'woocommerce'
|
|||
|
),
|
|||
|
method_title
|
|||
|
)
|
|||
|
: sprintf(
|
|||
|
/* translators: %s: payment method title */
|
|||
|
__(
|
|||
|
'Set up the "%s" payment method',
|
|||
|
'woocommerce'
|
|||
|
),
|
|||
|
method_title
|
|||
|
)
|
|||
|
}
|
|||
|
href={ settings_url }
|
|||
|
>
|
|||
|
{ enabled
|
|||
|
? __( 'Manage', 'woocommerce' )
|
|||
|
: __( 'Finish setup', 'woocommerce' ) }
|
|||
|
</a>
|
|||
|
) }
|
|||
|
</td>
|
|||
|
</tr>
|
|||
|
);
|
|||
|
};
|