54 lines
1.3 KiB
TypeScript
54 lines
1.3 KiB
TypeScript
/**
|
|
* External dependencies
|
|
*/
|
|
import { useShallowEqual } from '@woocommerce/base-hooks';
|
|
import type {
|
|
PaymentMethods,
|
|
ExpressPaymentMethods,
|
|
} from '@woocommerce/type-defs/payments';
|
|
|
|
/**
|
|
* Internal dependencies
|
|
*/
|
|
import { usePaymentMethodDataContext } from '../../providers/cart-checkout/payment-methods';
|
|
|
|
interface PaymentMethodState {
|
|
paymentMethods: PaymentMethods;
|
|
isInitialized: boolean;
|
|
}
|
|
interface ExpressPaymentMethodState {
|
|
paymentMethods: ExpressPaymentMethods;
|
|
isInitialized: boolean;
|
|
}
|
|
|
|
const usePaymentMethodState = (
|
|
express = false
|
|
): PaymentMethodState | ExpressPaymentMethodState => {
|
|
const {
|
|
paymentMethods,
|
|
expressPaymentMethods,
|
|
paymentMethodsInitialized,
|
|
expressPaymentMethodsInitialized,
|
|
} = usePaymentMethodDataContext();
|
|
|
|
const currentPaymentMethods = useShallowEqual( paymentMethods );
|
|
const currentExpressPaymentMethods = useShallowEqual(
|
|
expressPaymentMethods
|
|
);
|
|
|
|
return {
|
|
paymentMethods: express
|
|
? currentExpressPaymentMethods
|
|
: currentPaymentMethods,
|
|
isInitialized: express
|
|
? expressPaymentMethodsInitialized
|
|
: paymentMethodsInitialized,
|
|
};
|
|
};
|
|
|
|
export const usePaymentMethods = ():
|
|
| PaymentMethodState
|
|
| ExpressPaymentMethodState => usePaymentMethodState( false );
|
|
export const useExpressPaymentMethods = (): ExpressPaymentMethodState =>
|
|
usePaymentMethodState( true );
|