Skip to content
This repository has been archived by the owner on Feb 23, 2024. It is now read-only.

Commit

Permalink
Use data from Payment Method context instead of reading setting from …
Browse files Browse the repository at this point in the history
…the server
  • Loading branch information
Aljullu committed Aug 10, 2020
1 parent 9bf9b36 commit 40db3ee
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import {
usePaymentMethodDataContext,
} from '@woocommerce/base-context';
import RadioControl from '@woocommerce/base-components/radio-control';
import { PAYMENT_GATEWAY_SORT_ORDER } from '@woocommerce/block-settings';

/**
* @typedef {import('@woocommerce/type-defs/contexts').CustomerPaymentMethod} CustomerPaymentMethod
Expand Down Expand Up @@ -105,15 +104,9 @@ const SavedPaymentMethodOptions = ( { onSelect } ) => {
if ( paymentMethodKeys.length > 0 ) {
paymentMethodKeys.forEach( ( type ) => {
const paymentMethods = customerPaymentMethods[ type ];
const enabledPaymentMethods = paymentMethods.filter(
( paymentMethod ) =>
PAYMENT_GATEWAY_SORT_ORDER.includes(
paymentMethod.method.gateway
)
);
if ( enabledPaymentMethods.length > 0 ) {
if ( paymentMethods.length > 0 ) {
options = options.concat(
enabledPaymentMethods.map( ( paymentMethod ) => {
paymentMethods.map( ( paymentMethod ) => {
const option =
type === 'cc' || type === 'echeck'
? getCcOrEcheckPaymentMethodOption(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,32 @@ export const usePaymentMethodDataContext = () => {
return useContext( PaymentMethodDataContext );
};

/**
* Gets the payment methods saved for the current user after filtering out
* disabled ones.
*
* @param {Object[]} availablePaymentMethods List of available payment methods.
* @return {Object} Object containing the payment methods saved for a specific user which are available.
*/
const getCustomerPaymentMethods = ( availablePaymentMethods = [] ) => {
const customerPaymentMethods = getSetting( 'customerPaymentMethods', {} );
const paymentMethodKeys = Object.keys( customerPaymentMethods );
if ( paymentMethodKeys.length === 0 ) {
return {};
}
const enabledCustomerPaymentMethods = {};
paymentMethodKeys.forEach( ( type ) => {
enabledCustomerPaymentMethods[ type ] = customerPaymentMethods[
type
].filter( ( paymentMethod ) => {
return Object.keys( availablePaymentMethods ).includes(
paymentMethod.method.gateway
);
} );
} );
return enabledCustomerPaymentMethods;
};

/**
* PaymentMethodDataProvider is automatically included in the
* CheckoutDataProvider.
Expand Down Expand Up @@ -107,10 +133,7 @@ export const PaymentMethodDataProvider = ( { children } ) => {
const currentObservers = useRef( observers );

const { isEditor, previewData } = useEditorContext();
const customerPaymentMethods =
isEditor && previewData?.previewSavedPaymentMethods
? previewData?.previewSavedPaymentMethods
: getSetting( 'customerPaymentMethods', {} );

const [ paymentData, dispatch ] = useReducer(
reducer,
DEFAULT_PAYMENT_DATA
Expand Down Expand Up @@ -150,6 +173,21 @@ export const PaymentMethodDataProvider = ( { children } ) => {
[ dispatch ]
);

const customerPaymentMethods = useMemo( () => {
if ( isEditor && previewData.previewSavedPaymentMethods ) {
return previewData.previewSavedPaymentMethods;
}
if ( ! paymentMethodsInitialized ) {
return {};
}
return getCustomerPaymentMethods( paymentData.paymentMethods );
}, [
isEditor,
previewData.previewSavedPaymentMethods,
paymentMethodsInitialized,
paymentData.paymentMethods,
] );

const setExpressPaymentError = useCallback(
( message ) => {
if ( message ) {
Expand Down

0 comments on commit 40db3ee

Please sign in to comment.