mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-05 08:59:14 +08:00
103 lines
2.5 KiB
JavaScript
103 lines
2.5 KiB
JavaScript
import ACTION_TYPES from './action-types';
|
|
|
|
const defaultState = {
|
|
isReady: false,
|
|
isSaving: false,
|
|
|
|
// Data persisted to the server.
|
|
data: {
|
|
completed: false,
|
|
step: 0,
|
|
useSandbox: false,
|
|
useManualConnection: false,
|
|
clientId: '',
|
|
clientSecret: '',
|
|
isCasualSeller: null, // null value will uncheck both options in the UI.
|
|
products: [],
|
|
},
|
|
|
|
// Read only values, provided by the server.
|
|
flags: {
|
|
canUseCasualSelling: false,
|
|
canUseVaulting: false,
|
|
canUseCardPayments: false,
|
|
},
|
|
};
|
|
|
|
export const onboardingReducer = (
|
|
state = defaultState,
|
|
{ type, ...action }
|
|
) => {
|
|
const setTransient = ( changes ) => {
|
|
const { data, ...transientChanges } = changes;
|
|
return { ...state, ...transientChanges };
|
|
};
|
|
|
|
const setPersistent = ( changes ) => {
|
|
const validChanges = Object.keys( changes ).reduce( ( acc, key ) => {
|
|
if ( key in defaultState.data ) {
|
|
acc[ key ] = changes[ key ];
|
|
}
|
|
return acc;
|
|
}, {} );
|
|
|
|
return {
|
|
...state,
|
|
data: { ...state.data, ...validChanges },
|
|
};
|
|
};
|
|
|
|
switch ( type ) {
|
|
// Reset store to initial state.
|
|
case ACTION_TYPES.RESET_ONBOARDING:
|
|
return setPersistent( defaultState.data );
|
|
|
|
// Transient data.
|
|
case ACTION_TYPES.SET_ONBOARDING_IS_READY:
|
|
return setTransient( { isReady: action.isReady } );
|
|
|
|
case ACTION_TYPES.SET_IS_SAVING_ONBOARDING:
|
|
return setTransient( { isSaving: action.isSaving } );
|
|
|
|
// Persistent data.
|
|
case ACTION_TYPES.SET_ONBOARDING_DETAILS:
|
|
const newState = setPersistent( action.payload.data );
|
|
|
|
if ( action.payload.flags ) {
|
|
newState.flags = { ...newState.flags, ...action.payload.flags };
|
|
}
|
|
|
|
return newState;
|
|
|
|
case ACTION_TYPES.SET_ONBOARDING_COMPLETED:
|
|
return setPersistent( { completed: action.completed } );
|
|
|
|
case ACTION_TYPES.SET_CLIENT_ID:
|
|
return setPersistent( { clientId: action.clientId } );
|
|
|
|
case ACTION_TYPES.SET_CLIENT_SECRET:
|
|
return setPersistent( { clientSecret: action.clientSecret } );
|
|
|
|
case ACTION_TYPES.SET_ONBOARDING_STEP:
|
|
return setPersistent( { step: action.step } );
|
|
|
|
case ACTION_TYPES.SET_SANDBOX_MODE:
|
|
return setPersistent( { useSandbox: action.useSandbox } );
|
|
|
|
case ACTION_TYPES.SET_MANUAL_CONNECTION_MODE:
|
|
return setPersistent( {
|
|
useManualConnection: action.useManualConnection,
|
|
} );
|
|
|
|
case ACTION_TYPES.SET_IS_CASUAL_SELLER:
|
|
return setPersistent( { isCasualSeller: action.isCasualSeller } );
|
|
|
|
case ACTION_TYPES.SET_PRODUCTS:
|
|
return setPersistent( { products: action.products } );
|
|
|
|
default:
|
|
return state;
|
|
}
|
|
};
|
|
|
|
export default onboardingReducer;
|