♻️ Adjust hooks to new code, rename a flag

This commit is contained in:
Philipp Stracker 2024-11-20 16:54:53 +01:00
parent 1c27e90923
commit 4bcdb445d4
No known key found for this signature in database
2 changed files with 36 additions and 63 deletions

View file

@ -3,19 +3,31 @@
* *
* These encapsulate store interactions, offering a consistent interface. * These encapsulate store interactions, offering a consistent interface.
* Hooks simplify data access and manipulation for components. * Hooks simplify data access and manipulation for components.
* Exported hooks must have unique names across all store modules.
* *
* @file * @file
*/ */
import { useSelect, useDispatch } from '@wordpress/data'; import { useSelect, useDispatch } from '@wordpress/data';
import { PRODUCT_TYPES, STORE_NAME } from '../constants'; import { PRODUCT_TYPES } from '../constants';
import { STORE_NAME } from './constants';
const useTransient = ( key ) =>
useSelect(
( select ) => select( STORE_NAME ).transientData()?.[ key ],
[ key ]
);
const usePersistent = ( key ) =>
useSelect(
( select ) => select( STORE_NAME ).persistentData()?.[ key ],
[ key ]
);
const useOnboardingDetails = () => { const useOnboardingDetails = () => {
const { const {
persist, persist,
setOnboardingStep, setStep,
setCompleted, setCompleted,
setSandboxMode, setSandboxMode,
setManualConnectionMode, setManualConnectionMode,
@ -25,61 +37,23 @@ const useOnboardingDetails = () => {
setProducts, setProducts,
} = useDispatch( STORE_NAME ); } = useDispatch( STORE_NAME );
const transientData = ( select ) =>
select( STORE_NAME ).onboardingTransientData();
const persistentData = ( select ) =>
select( STORE_NAME ).onboardingPersistentData();
// Read-only flags. // Read-only flags.
const flags = useSelect( ( select ) => { const flags = useSelect( ( select ) => select( STORE_NAME ).flags(), [] );
return select( STORE_NAME ).onboardingFlags();
} );
// Transient accessors. // Transient accessors.
const isSaving = useSelect( ( select ) => { const isSaving = useTransient( 'isSaving' );
return transientData( select ).isSaving; const isReady = useTransient( 'isReady' );
}, [] ); const isBusy = useTransient( 'isBusy' );
const isReady = useSelect( ( select ) => {
return transientData( select ).isReady;
} );
const isManualConnectionBusy = useSelect( ( select ) => {
return transientData( select ).isManualConnectionBusy;
}, [] );
// Persistent accessors. // Persistent accessors.
const step = useSelect( ( select ) => { const step = usePersistent( 'step' );
return persistentData( select ).step || 0; const completed = usePersistent( 'completed' );
} ); const clientId = usePersistent( 'clientId' );
const clientSecret = usePersistent( 'clientSecret' );
const completed = useSelect( ( select ) => { const isSandboxMode = usePersistent( 'useSandbox' );
return persistentData( select ).completed; const isManualConnectionMode = usePersistent( 'useManualConnection' );
} ); const isCasualSeller = usePersistent( 'isCasualSeller' );
const products = usePersistent( 'products' );
const clientId = useSelect( ( select ) => {
return persistentData( select ).clientId;
}, [] );
const clientSecret = useSelect( ( select ) => {
return persistentData( select ).clientSecret;
}, [] );
const isSandboxMode = useSelect( ( select ) => {
return persistentData( select ).useSandbox;
}, [] );
const isManualConnectionMode = useSelect( ( select ) => {
return persistentData( select ).useManualConnection;
}, [] );
const isCasualSeller = useSelect( ( select ) => {
return persistentData( select ).isCasualSeller;
}, [] );
const products = useSelect( ( select ) => {
return persistentData( select ).products || [];
}, [] );
const toggleProduct = ( list ) => { const toggleProduct = ( list ) => {
const validProducts = list.filter( ( item ) => const validProducts = list.filter( ( item ) =>
@ -96,9 +70,9 @@ const useOnboardingDetails = () => {
return { return {
isSaving, isSaving,
isReady, isReady,
isManualConnectionBusy, isBusy,
step, step,
setStep: ( value ) => setDetailAndPersist( setOnboardingStep, value ), setStep: ( value ) => setDetailAndPersist( setStep, value ),
completed, completed,
setCompleted: ( state ) => setDetailAndPersist( setCompleted, state ), setCompleted: ( state ) => setDetailAndPersist( setCompleted, state ),
isSandboxMode, isSandboxMode,
@ -121,10 +95,10 @@ const useOnboardingDetails = () => {
}; };
}; };
export const useOnboardingStepWelcome = () => { export const useConnection = () => {
const { const {
isSaving, isSaving,
isManualConnectionBusy, isBusy,
isSandboxMode, isSandboxMode,
setSandboxMode, setSandboxMode,
isManualConnectionMode, isManualConnectionMode,
@ -137,7 +111,7 @@ export const useOnboardingStepWelcome = () => {
return { return {
isSaving, isSaving,
isManualConnectionBusy, isBusy,
isSandboxMode, isSandboxMode,
setSandboxMode, setSandboxMode,
isManualConnectionMode, isManualConnectionMode,
@ -149,19 +123,19 @@ export const useOnboardingStepWelcome = () => {
}; };
}; };
export const useOnboardingStepBusiness = () => { export const useBusiness = () => {
const { isCasualSeller, setIsCasualSeller } = useOnboardingDetails(); const { isCasualSeller, setIsCasualSeller } = useOnboardingDetails();
return { isCasualSeller, setIsCasualSeller }; return { isCasualSeller, setIsCasualSeller };
}; };
export const useOnboardingStepProducts = () => { export const useProducts = () => {
const { products, toggleProduct } = useOnboardingDetails(); const { products, toggleProduct } = useOnboardingDetails();
return { products, toggleProduct }; return { products, toggleProduct };
}; };
export const useOnboardingStep = () => { export const useSteps = () => {
const { isReady, step, setStep, completed, setCompleted, flags } = const { isReady, step, setStep, completed, setCompleted, flags } =
useOnboardingDetails(); useOnboardingDetails();

View file

@ -2,7 +2,6 @@
* Reducer: Defines store structure and state updates for this module. * Reducer: Defines store structure and state updates for this module.
* *
* Manages both transient (temporary) and persistent (saved) state. * Manages both transient (temporary) and persistent (saved) state.
* Each module uses isolated memory objects to prevent conflicts.
* The initial state must define all properties, as dynamic additions are not supported. * The initial state must define all properties, as dynamic additions are not supported.
* *
* @file * @file
@ -16,7 +15,7 @@ import ACTION_TYPES from './action-types';
const defaultTransient = { const defaultTransient = {
isReady: false, isReady: false,
isSaving: false, isSaving: false,
isManualConnectionBusy: false, isBusy: false,
// Read only values, provided by the server. // Read only values, provided by the server.
flags: { flags: {