♻️ Make client ID and secret persistent

This commit is contained in:
Philipp Stracker 2024-10-24 12:47:30 +02:00
parent 7b12e65ca8
commit 9629c86447
No known key found for this signature in database
4 changed files with 58 additions and 67 deletions

View file

@ -1,12 +1,12 @@
export default { export default {
// Transient data. // Transient data.
SET_IS_SAVING_ONBOARDING_DETAILS: 'SET_IS_SAVING_ONBOARDING_DETAILS', SET_IS_SAVING_ONBOARDING_DETAILS: 'SET_IS_SAVING_ONBOARDING_DETAILS',
SET_CLIENT_ID: 'SET_CLIENT_ID',
SET_CLIENT_SECRET: 'SET_CLIENT_SECRET',
// Persistent data. // Persistent data.
SET_ONBOARDING_DETAILS: 'SET_ONBOARDING_DETAILS', SET_ONBOARDING_DETAILS: 'SET_ONBOARDING_DETAILS',
SET_ONBOARDING_STEP: 'SET_ONBOARDING_STEP', SET_ONBOARDING_STEP: 'SET_ONBOARDING_STEP',
SET_SANDBOX_MODE: 'SET_SANDBOX_MODE', SET_SANDBOX_MODE: 'SET_SANDBOX_MODE',
SET_MANUAL_CONNECTION_MODE: 'SET_MANUAL_CONNECTION_MODE', SET_MANUAL_CONNECTION_MODE: 'SET_MANUAL_CONNECTION_MODE',
SET_CLIENT_ID: 'SET_CLIENT_ID',
SET_CLIENT_SECRET: 'SET_CLIENT_SECRET',
}; };

View file

@ -3,6 +3,19 @@ import { apiFetch } from '@wordpress/data-controls';
import ACTION_TYPES from './action-types'; import ACTION_TYPES from './action-types';
import { NAMESPACE, STORE_NAME } from '../constants'; import { NAMESPACE, STORE_NAME } from '../constants';
/**
* Non-persistent. Changes the "saving" flag.
*
* @param {boolean} isSaving
* @return {{type: string, isSaving}} The action.
*/
export const setIsSaving = ( isSaving ) => {
return {
type: ACTION_TYPES.SET_IS_SAVING_ONBOARDING_DETAILS,
isSaving,
};
};
/** /**
* Persistent. Set the full onboarding details, usually during app initialization. * Persistent. Set the full onboarding details, usually during app initialization.
* *
@ -56,20 +69,7 @@ export const setManualConnectionMode = ( manualConnectionMode ) => {
}; };
/** /**
* Non-persistent. Changes the "saving" flag. * Persistent. Changes the "client ID" value.
*
* @param {boolean} isSaving
* @return {{type: string, isSaving}} The action.
*/
export const setIsSaving = ( isSaving ) => {
return {
type: ACTION_TYPES.SET_IS_SAVING_ONBOARDING_DETAILS,
isSaving,
};
};
/**
* Non-persistent. Changes the "client ID" value.
* *
* @param {string} clientId * @param {string} clientId
* @return {{type: string, clientId}} The action. * @return {{type: string, clientId}} The action.
@ -82,7 +82,7 @@ export const setClientId = ( clientId ) => {
}; };
/** /**
* Non-persistent. Changes the "client secret" value. * Persistent. Changes the "client secret" value.
* *
* @param {string} clientSecret * @param {string} clientSecret
* @return {{type: string, clientSecret}} The action. * @return {{type: string, clientSecret}} The action.

View file

@ -16,15 +16,15 @@ export const useOnboardingDetails = () => {
return select( STORE_NAME ).getTransientData().isSaving; return select( STORE_NAME ).getTransientData().isSaving;
}, [] ); }, [] );
// Persistent accessors.
const clientId = useSelect( ( select ) => { const clientId = useSelect( ( select ) => {
return select( STORE_NAME ).getTransientData().clientId; return select( STORE_NAME ).getPersistentData().clientId;
}, [] ); }, [] );
const clientSecret = useSelect( ( select ) => { const clientSecret = useSelect( ( select ) => {
return select( STORE_NAME ).getTransientData().clientSecret; return select( STORE_NAME ).getPersistentData().clientSecret;
}, [] ); }, [] );
// Persistent accessors.
const onboardingStep = useSelect( ( select ) => { const onboardingStep = useSelect( ( select ) => {
return select( STORE_NAME ).getPersistentData().step || 0; return select( STORE_NAME ).getPersistentData().step || 0;
}, [] ); }, [] );
@ -48,9 +48,10 @@ export const useOnboardingDetails = () => {
isSandboxMode, isSandboxMode,
isManualConnectionMode, isManualConnectionMode,
clientId, clientId,
setClientId, setClientId: ( value ) => setDetailAndPersist( setClientId, value ),
clientSecret, clientSecret,
setClientSecret, setClientSecret: ( value ) =>
setDetailAndPersist( setClientSecret, value ),
setOnboardingStep: ( step ) => setOnboardingStep: ( step ) =>
setDetailAndPersist( setOnboardingStep, step ), setDetailAndPersist( setOnboardingStep, step ),
setSandboxMode: ( state ) => setSandboxMode: ( state ) =>

View file

@ -2,12 +2,12 @@ import ACTION_TYPES from './action-types';
const defaultState = { const defaultState = {
isSaving: false, isSaving: false,
clientId: '',
clientSecret: '',
data: { data: {
step: 0, step: 0,
useSandbox: false, useSandbox: false,
useManualConnection: false, useManualConnection: false,
clientId: '',
clientSecret: '',
}, },
}; };
@ -15,64 +15,54 @@ export const onboardingReducer = (
state = defaultState, state = defaultState,
{ type, ...action } { 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 ) { switch ( type ) {
// Transient data. // Transient data.
case ACTION_TYPES.SET_IS_SAVING_ONBOARDING_DETAILS: case ACTION_TYPES.SET_IS_SAVING_ONBOARDING_DETAILS:
return { return setTransient( { isSaving: action.isSaving } );
...state,
isSaving: action.isSaving,
};
case ACTION_TYPES.SET_CLIENT_ID:
return {
...state,
clientId: action.clientId,
};
case ACTION_TYPES.SET_CLIENT_SECRET:
return {
...state,
clientSecret: action.clientSecret,
};
// Persistent data. // Persistent data.
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_DETAILS: case ACTION_TYPES.SET_ONBOARDING_DETAILS:
return { return setPersistent( action.payload );
...state,
data: action.payload,
};
case ACTION_TYPES.SET_ONBOARDING_STEP: case ACTION_TYPES.SET_ONBOARDING_STEP:
return { return setPersistent( { step: action.step } );
...state,
data: {
...( state.data || {} ),
step: action.step,
},
};
case ACTION_TYPES.SET_SANDBOX_MODE: case ACTION_TYPES.SET_SANDBOX_MODE:
return { return setPersistent( { useSandbox: action.useSandbox } );
...state,
data: {
...( state.data || {} ),
useSandbox: action.useSandbox,
},
};
case ACTION_TYPES.SET_MANUAL_CONNECTION_MODE: case ACTION_TYPES.SET_MANUAL_CONNECTION_MODE:
return { return setPersistent( {
...state, useManualConnection: action.useManualConnection,
data: { } );
...( state.data || {} ),
useManualConnection: action.useManualConnection,
},
};
default: default:
return state;
} }
return state;
}; };
export default onboardingReducer; export default onboardingReducer;