File "reducer.ts"
Full Path: /home/vantageo/public_html/cache/cache/cache/.wp-cli/wp-content/plugins/woocommerce/packages/woocommerce-blocks/assets/js/base/context/providers/cart-checkout/payment-methods/reducer.ts
File size: 2.88 KB
MIME-type: text/x-java
Charset: utf-8
/**
* Internal dependencies
*/
import {
ACTION,
STATUS,
DEFAULT_PAYMENT_DATA_CONTEXT_STATE,
} from './constants';
import type { PaymentMethodDataContextState } from './types';
import type { ActionType } from './actions';
const hasSavedPaymentToken = (
paymentMethodData: Record< string, unknown > | undefined
): boolean => {
return !! (
typeof paymentMethodData === 'object' && paymentMethodData.isSavedToken
);
};
/**
* Reducer for payment data state
*/
const reducer = (
state = DEFAULT_PAYMENT_DATA_CONTEXT_STATE,
{
type,
paymentMethodData,
shouldSavePaymentMethod = false,
errorMessage = '',
paymentMethods = {},
}: ActionType
): PaymentMethodDataContextState => {
switch ( type ) {
case STATUS.STARTED:
return state.currentStatus !== STATUS.STARTED
? {
...state,
currentStatus: STATUS.STARTED,
paymentMethodData:
paymentMethodData || state.paymentMethodData,
hasSavedToken: hasSavedPaymentToken(
paymentMethodData || state.paymentMethodData
),
}
: state;
case STATUS.ERROR:
return state.currentStatus !== STATUS.ERROR
? {
...state,
currentStatus: STATUS.ERROR,
errorMessage: errorMessage || state.errorMessage,
}
: state;
case STATUS.FAILED:
return state.currentStatus !== STATUS.FAILED
? {
...state,
currentStatus: STATUS.FAILED,
paymentMethodData:
paymentMethodData || state.paymentMethodData,
errorMessage: errorMessage || state.errorMessage,
}
: state;
case STATUS.SUCCESS:
return state.currentStatus !== STATUS.SUCCESS
? {
...state,
currentStatus: STATUS.SUCCESS,
paymentMethodData:
paymentMethodData || state.paymentMethodData,
hasSavedToken: hasSavedPaymentToken(
paymentMethodData || state.paymentMethodData
),
}
: state;
case STATUS.PROCESSING:
return state.currentStatus !== STATUS.PROCESSING
? {
...state,
currentStatus: STATUS.PROCESSING,
errorMessage: '',
}
: state;
case STATUS.COMPLETE:
return state.currentStatus !== STATUS.COMPLETE
? {
...state,
currentStatus: STATUS.COMPLETE,
}
: state;
case STATUS.PRISTINE:
return {
...DEFAULT_PAYMENT_DATA_CONTEXT_STATE,
currentStatus: STATUS.PRISTINE,
// keep payment method registration state
paymentMethods: {
...state.paymentMethods,
},
expressPaymentMethods: {
...state.expressPaymentMethods,
},
shouldSavePaymentMethod: state.shouldSavePaymentMethod,
};
case ACTION.SET_REGISTERED_PAYMENT_METHODS:
return {
...state,
paymentMethods,
};
case ACTION.SET_REGISTERED_EXPRESS_PAYMENT_METHODS:
return {
...state,
expressPaymentMethods: paymentMethods,
};
case ACTION.SET_SHOULD_SAVE_PAYMENT_METHOD:
return {
...state,
shouldSavePaymentMethod,
};
}
};
export default reducer;