New action to change payment method details

This commit is contained in:
Philipp Stracker 2025-01-27 11:03:03 +01:00
parent 56150740c9
commit e878deb66e
No known key found for this signature in database
4 changed files with 33 additions and 3 deletions

View file

@ -12,6 +12,7 @@ export default {
SET_PERSISTENT: 'PAYMENT:SET_PERSISTENT',
RESET: 'PAYMENT:RESET',
HYDRATE: 'PAYMENT:HYDRATE',
CHANGE_PAYMENT_SETTING: 'PAYMENT:CHANGE_PAYMENT_SETTING',
// Controls - always start with "DO_".
DO_PERSIST_DATA: 'PAYMENT:DO_PERSIST_DATA',

View file

@ -68,6 +68,18 @@ export const setPersistent = ( prop, value ) => ( {
*/
export const setIsReady = ( isReady ) => setTransient( 'isReady', isReady );
/**
* Modify properties of a specific payment method.
*
* @param {string} id The payment method ID.
* @param {Object} props New props.
* @return {Action} The action.
*/
export const changePaymentSettings = ( id, props ) => ( {
type: ACTION_TYPES.CHANGE_PAYMENT_SETTING,
payload: { id, props },
} );
/**
* Side effect. Triggers the persistence of store data to the server.
*

View file

@ -14,7 +14,8 @@ import { createHooksForStore } from '../utils';
const useHooks = () => {
const { useTransient, usePersistent } = createHooksForStore( STORE_NAME );
const { persist, setPersistent } = useDispatch( STORE_NAME );
const { persist, setPersistent, changePaymentSettings } =
useDispatch( STORE_NAME );
// Read-only flags and derived state.
// Nothing here yet.
@ -60,6 +61,7 @@ const useHooks = () => {
persist,
isReady,
setPersistent,
changePaymentSettings,
paypal,
venmo,
payLater,
@ -86,8 +88,9 @@ const useHooks = () => {
};
export const useStore = () => {
const { persist, isReady } = useHooks();
return { persist, isReady };
const { persist, isReady, setPersistent, changePaymentSettings } =
useHooks();
return { persist, isReady, setPersistent, changePaymentSettings };
};
export const usePaymentMethods = () => {

View file

@ -57,6 +57,20 @@ const reducer = createReducer( defaultTransient, defaultPersistent, {
[ ACTION_TYPES.SET_PERSISTENT ]: ( state, payload ) =>
changePersistent( state, payload ),
[ ACTION_TYPES.CHANGE_PAYMENT_SETTING ]: ( state, payload ) => {
const methodId = payload.id;
const oldProps = state.data[ methodId ];
if ( ! oldProps || oldProps.id !== methodId ) {
return state;
}
return changePersistent( state, {
...state,
[ methodId ]: { ...oldProps, ...payload.props },
} );
},
[ ACTION_TYPES.RESET ]: ( state ) => {
const cleanState = changeTransient(
changePersistent( state, defaultPersistent ),