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 );
|