♻️ Separate eligibility flags from user input

This commit is contained in:
Philipp Stracker 2024-10-30 16:52:06 +01:00
parent 4457dfed12
commit 0faeb5fd6b
No known key found for this signature in database
5 changed files with 67 additions and 50 deletions

View file

@ -32,7 +32,7 @@ export const setIsSaving = ( isSaving ) => {
/**
* Persistent. Set the full onboarding details, usually during app initialization.
*
* @param {Object} payload
* @param {{data: {}, flags?: {}}} payload
* @return {{type: string, payload}} The action.
*/
export const setOnboardingDetails = ( payload ) => {

View file

@ -3,6 +3,8 @@ import ACTION_TYPES from './action-types';
const defaultState = {
isReady: false,
isSaving: false,
// Data persisted to the server.
data: {
completed: false,
step: 0,
@ -10,6 +12,10 @@ const defaultState = {
useManualConnection: false,
clientId: '',
clientSecret: '',
},
// Read only values, provided by the server.
flags: {
canUseCasualSelling: false,
canUseVaulting: false,
canUseCardPayments: false,
@ -49,7 +55,13 @@ export const onboardingReducer = (
// Persistent data.
case ACTION_TYPES.SET_ONBOARDING_DETAILS:
return setPersistent( action.payload );
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 } );

View file

@ -13,6 +13,10 @@ export const getPersistentData = ( state ) => {
};
export const getTransientData = ( state ) => {
const { data, ...transientState } = getOnboardingState( state );
const { data, flags, ...transientState } = getOnboardingState( state );
return transientState || EMPTY_OBJ;
};
export const getFlags = ( state ) => {
return getOnboardingState( state ).flags || EMPTY_OBJ;
};