diff --git a/assets/js/blocks/cart-checkout-shared/payment-methods/payment-method-error-boundary.tsx b/assets/js/blocks/cart-checkout-shared/payment-methods/payment-method-error-boundary.tsx
index 6f43e7de18a..f925b5c298f 100644
--- a/assets/js/blocks/cart-checkout-shared/payment-methods/payment-method-error-boundary.tsx
+++ b/assets/js/blocks/cart-checkout-shared/payment-methods/payment-method-error-boundary.tsx
@@ -2,51 +2,66 @@
* External dependencies
*/
import { __ } from '@wordpress/i18n';
-import { useState } from '@wordpress/element';
+import { Component } from '@wordpress/element';
import { CURRENT_USER_IS_ADMIN } from '@woocommerce/settings';
import { StoreNoticesContainer } from '@woocommerce/blocks-components';
import { noticeContexts } from '@woocommerce/base-context';
import { NoticeType } from '@woocommerce/types';
+import {
+ DerivedStateReturn,
+ ReactError,
+} from '@woocommerce/base-components/block-error-boundary/types';
+
interface PaymentMethodErrorBoundaryProps {
isEditor: boolean;
children: React.ReactNode;
}
-const PaymentMethodErrorBoundary = ( {
- isEditor,
- children,
-}: PaymentMethodErrorBoundaryProps ) => {
- const [ errorMessage ] = useState( '' );
- const [ hasError ] = useState( false );
- if ( hasError ) {
- let errorText = __(
- 'We are experiencing difficulties with this payment method. Please contact us for assistance.',
- 'woo-gutenberg-products-block'
- );
- if ( isEditor || CURRENT_USER_IS_ADMIN ) {
- if ( errorMessage ) {
- errorText = errorMessage;
- } else {
- errorText = __(
- "There was an error with this payment method. Please verify it's configured correctly.",
- 'woo-gutenberg-products-block'
- );
+
+class PaymentMethodErrorBoundary extends Component< PaymentMethodErrorBoundaryProps > {
+ state = { errorMessage: '', hasError: false };
+ static getDerivedStateFromError( error: ReactError ): DerivedStateReturn {
+ return {
+ errorMessage: error.message,
+ hasError: true,
+ };
+ }
+
+ render() {
+ const { hasError, errorMessage } = this.state;
+ const { isEditor } = this.props;
+
+ if ( hasError ) {
+ let errorText = __(
+ 'We are experiencing difficulties with this payment method. Please contact us for assistance.',
+ 'woo-gutenberg-products-block'
+ );
+ if ( isEditor || CURRENT_USER_IS_ADMIN ) {
+ if ( errorMessage ) {
+ errorText = errorMessage;
+ } else {
+ errorText = __(
+ "There was an error with this payment method. Please verify it's configured correctly.",
+ 'woo-gutenberg-products-block'
+ );
+ }
}
+ const notices: NoticeType[] = [
+ {
+ id: '0',
+ content: errorText,
+ isDismissible: false,
+ status: 'error',
+ },
+ ];
+ return (
+
+ );
}
- const notices: NoticeType[] = [
- {
- id: '0',
- content: errorText,
- isDismissible: false,
- status: 'error',
- },
- ];
- return (
-
- );
+
+ return this.props.children;
}
- return <>{ children }>;
-};
+}
export default PaymentMethodErrorBoundary;