Correctly detect compatible express payment methods (https://github.com/woocommerce/woocommerce-blocks/pull/8201)
* Remove unused action and type action * Derive the incompatible payment methods with selector Instead of adding the incompatiblePaymentMethods to the payment state. Let's simply derive it using a selector to keep a minimal state. * Check compatibility with express payments
This commit is contained in:
parent
d38daee436
commit
7fd3ca96bf
|
@ -15,6 +15,5 @@ export enum ACTION_TYPES {
|
||||||
REMOVE_AVAILABLE_EXPRESS_PAYMENT_METHOD = 'REMOVE_AVAILABLE_EXPRESS_PAYMENT_METHOD',
|
REMOVE_AVAILABLE_EXPRESS_PAYMENT_METHOD = 'REMOVE_AVAILABLE_EXPRESS_PAYMENT_METHOD',
|
||||||
INITIALIZE_PAYMENT_METHODS = 'INITIALIZE_PAYMENT_METHODS',
|
INITIALIZE_PAYMENT_METHODS = 'INITIALIZE_PAYMENT_METHODS',
|
||||||
SET_PAYMENT_METHOD_DATA = 'SET_PAYMENT_METHOD_DATA',
|
SET_PAYMENT_METHOD_DATA = 'SET_PAYMENT_METHOD_DATA',
|
||||||
SET_INCOMPATIBLE_PAYMENT_METHODS = 'SET_INCOMPATIBLE_PAYMENT_METHODS',
|
|
||||||
SET_PAYMENT_RESULT = 'SET_PAYMENT_RESULT',
|
SET_PAYMENT_RESULT = 'SET_PAYMENT_RESULT',
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,13 +113,6 @@ export const __internalSetPaymentMethodData = (
|
||||||
paymentMethodData,
|
paymentMethodData,
|
||||||
} );
|
} );
|
||||||
|
|
||||||
export const setIncompatiblePaymentMethods = (
|
|
||||||
incompatiblePaymentMethods: Array< string > = []
|
|
||||||
) => ( {
|
|
||||||
type: ACTION_TYPES.SET_INCOMPATIBLE_PAYMENT_METHODS,
|
|
||||||
incompatiblePaymentMethods,
|
|
||||||
} );
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Store the result of the payment attempt from the /checkout StoreApi call
|
* Store the result of the payment attempt from the /checkout StoreApi call
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,11 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* External dependencies
|
* External dependencies
|
||||||
*/
|
*/
|
||||||
import type {
|
import type { EmptyObjectType, PaymentResult } from '@woocommerce/types';
|
||||||
EmptyObjectType,
|
|
||||||
GlobalPaymentMethod,
|
|
||||||
PaymentResult,
|
|
||||||
} from '@woocommerce/types';
|
|
||||||
import { getSetting } from '@woocommerce/settings';
|
import { getSetting } from '@woocommerce/settings';
|
||||||
import {
|
import {
|
||||||
PlainPaymentMethods,
|
PlainPaymentMethods,
|
||||||
|
@ -30,20 +26,10 @@ export interface PaymentState {
|
||||||
| EmptyObjectType;
|
| EmptyObjectType;
|
||||||
paymentMethodData: Record< string, unknown >;
|
paymentMethodData: Record< string, unknown >;
|
||||||
paymentResult: PaymentResult | null;
|
paymentResult: PaymentResult | null;
|
||||||
incompatiblePaymentMethods: Record< string, string >;
|
|
||||||
paymentMethodsInitialized: boolean;
|
paymentMethodsInitialized: boolean;
|
||||||
expressPaymentMethodsInitialized: boolean;
|
expressPaymentMethodsInitialized: boolean;
|
||||||
shouldSavePaymentMethod: boolean;
|
shouldSavePaymentMethod: boolean;
|
||||||
}
|
}
|
||||||
const incompatiblePaymentMethods: Record< string, string > = {};
|
|
||||||
|
|
||||||
if ( getSetting( 'globalPaymentMethods' ) ) {
|
|
||||||
getSetting< GlobalPaymentMethod[] >( 'globalPaymentMethods' ).forEach(
|
|
||||||
( method ) => {
|
|
||||||
incompatiblePaymentMethods[ method.id ] = method.title;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export const defaultPaymentState: PaymentState = {
|
export const defaultPaymentState: PaymentState = {
|
||||||
status: PAYMENT_STATUS.PRISTINE,
|
status: PAYMENT_STATUS.PRISTINE,
|
||||||
|
@ -55,7 +41,6 @@ export const defaultPaymentState: PaymentState = {
|
||||||
Record< string, SavedPaymentMethod[] > | EmptyObjectType
|
Record< string, SavedPaymentMethod[] > | EmptyObjectType
|
||||||
>( 'customerPaymentMethods', {} ),
|
>( 'customerPaymentMethods', {} ),
|
||||||
paymentMethodData: {},
|
paymentMethodData: {},
|
||||||
incompatiblePaymentMethods,
|
|
||||||
paymentResult: null,
|
paymentResult: null,
|
||||||
paymentMethodsInitialized: false,
|
paymentMethodsInitialized: false,
|
||||||
expressPaymentMethodsInitialized: false,
|
expressPaymentMethodsInitialized: false,
|
||||||
|
|
|
@ -125,13 +125,6 @@ const reducer: Reducer< PaymentState > = (
|
||||||
newState = {
|
newState = {
|
||||||
...state,
|
...state,
|
||||||
availablePaymentMethods: action.paymentMethods,
|
availablePaymentMethods: action.paymentMethods,
|
||||||
incompatiblePaymentMethods: Object.fromEntries(
|
|
||||||
Object.entries( state.incompatiblePaymentMethods ).filter(
|
|
||||||
( [ k ] ) => {
|
|
||||||
return ! ( k in action.paymentMethods );
|
|
||||||
}
|
|
||||||
)
|
|
||||||
),
|
|
||||||
};
|
};
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
*/
|
*/
|
||||||
import { objectHasProp } from '@woocommerce/types';
|
import { objectHasProp } from '@woocommerce/types';
|
||||||
import deprecated from '@wordpress/deprecated';
|
import deprecated from '@wordpress/deprecated';
|
||||||
|
import { getSetting } from '@woocommerce/settings';
|
||||||
|
import type { GlobalPaymentMethod } from '@woocommerce/types';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Internal dependencies
|
* Internal dependencies
|
||||||
|
@ -11,6 +13,15 @@ import { PaymentState } from './default-state';
|
||||||
import { filterActiveSavedPaymentMethods } from './utils/filter-active-saved-payment-methods';
|
import { filterActiveSavedPaymentMethods } from './utils/filter-active-saved-payment-methods';
|
||||||
import { STATUS as PAYMENT_STATUS } from './constants';
|
import { STATUS as PAYMENT_STATUS } from './constants';
|
||||||
|
|
||||||
|
const globalPaymentMethods: Record< string, string > = {};
|
||||||
|
if ( getSetting( 'globalPaymentMethods' ) ) {
|
||||||
|
getSetting< GlobalPaymentMethod[] >( 'globalPaymentMethods' ).forEach(
|
||||||
|
( method ) => {
|
||||||
|
globalPaymentMethods[ method.id ] = method.title;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
export const isPaymentPristine = ( state: PaymentState ) =>
|
export const isPaymentPristine = ( state: PaymentState ) =>
|
||||||
state.status === PAYMENT_STATUS.PRISTINE;
|
state.status === PAYMENT_STATUS.PRISTINE;
|
||||||
|
|
||||||
|
@ -67,7 +78,17 @@ export const getPaymentMethodData = ( state: PaymentState ) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getIncompatiblePaymentMethods = ( state: PaymentState ) => {
|
export const getIncompatiblePaymentMethods = ( state: PaymentState ) => {
|
||||||
return state.incompatiblePaymentMethods;
|
return Object.fromEntries(
|
||||||
|
Object.entries( globalPaymentMethods ).filter( ( [ k ] ) => {
|
||||||
|
return ! (
|
||||||
|
k in
|
||||||
|
{
|
||||||
|
...state.availablePaymentMethods,
|
||||||
|
...state.availableExpressPaymentMethods,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} )
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getSavedPaymentMethods = ( state: PaymentState ) => {
|
export const getSavedPaymentMethods = ( state: PaymentState ) => {
|
||||||
|
|
Loading…
Reference in New Issue