From 426230bee9033c2f9ce65d95bdd1ed00ca276740 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Thu, 31 Oct 2024 15:03:25 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=8F=97=EF=B8=8F=20Add=20conditional=20rou?= =?UTF-8?q?ting=20to=20onboarding=20steps?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/Components/Screens/Onboarding/Onboarding.js | 11 +++++------ .../Screens/Onboarding/availableSteps.js | 14 ++++++++++++++ .../resources/js/data/onboarding/hooks.js | 11 +++++++++-- 3 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 modules/ppcp-settings/resources/js/Components/Screens/Onboarding/availableSteps.js diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js index 712b17f86..212776a0a 100644 --- a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/Onboarding.js @@ -1,11 +1,9 @@ import Container from '../../ReusableComponents/Container'; -import StepWelcome from './StepWelcome'; -import StepBusiness from './StepBusiness'; -import StepProducts from './StepProducts'; import { useOnboardingStep } from '../../../data'; +import { getSteps } from './availableSteps'; const Onboarding = () => { - const { step, setStep, setCompleted } = useOnboardingStep(); + const { step, setStep, setCompleted, flags } = useOnboardingStep(); return ( @@ -14,14 +12,15 @@ const Onboarding = () => { currentStep={ step } setStep={ setStep } setCompleted={ setCompleted } + flags={ flags } /> ); }; -const OnboardingStep = ( { currentStep, setStep, setCompleted } ) => { - const stepperOrder = [ StepWelcome, StepBusiness, StepProducts ]; +const OnboardingStep = ( { currentStep, setStep, setCompleted, flags } ) => { + const stepperOrder = getSteps( flags ); const isValidStep = ( step ) => typeof step === 'number' && diff --git a/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/availableSteps.js b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/availableSteps.js new file mode 100644 index 000000000..dbb25f57e --- /dev/null +++ b/modules/ppcp-settings/resources/js/Components/Screens/Onboarding/availableSteps.js @@ -0,0 +1,14 @@ +import StepWelcome from './StepWelcome'; +import StepBusiness from './StepBusiness'; +import StepProducts from './StepProducts'; + +export const getSteps = ( flags ) => { + console.log( 'Step Flags:', flags ); + const allSteps = [ StepWelcome, StepBusiness, StepProducts ]; + + if ( ! flags.canUseCasualSelling ) { + return allSteps.filter( ( step ) => step !== StepBusiness ); + } + + return allSteps; +}; diff --git a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js index 9481e047d..e21cc5016 100644 --- a/modules/ppcp-settings/resources/js/data/onboarding/hooks.js +++ b/modules/ppcp-settings/resources/js/data/onboarding/hooks.js @@ -1,5 +1,6 @@ import { useSelect, useDispatch } from '@wordpress/data'; import { PRODUCT_TYPES, STORE_NAME } from '../constants'; +import { getFlags } from './selectors'; const useOnboardingDetails = () => { const { @@ -23,6 +24,11 @@ const useOnboardingDetails = () => { return select( STORE_NAME ).getTransientData().isReady; } ); + // Read-only flags. + const flags = useSelect( ( select ) => { + return select( STORE_NAME ).getFlags(); + } ); + // Persistent accessors. const step = useSelect( ( select ) => { return select( STORE_NAME ).getPersistentData().step || 0; @@ -91,6 +97,7 @@ const useOnboardingDetails = () => { setDetailAndPersist( setIsCasualSeller, value ), products, toggleProduct, + flags, }; }; @@ -133,8 +140,8 @@ export const useOnboardingStepProducts = () => { }; export const useOnboardingStep = () => { - const { isReady, step, setStep, completed, setCompleted } = + const { isReady, step, setStep, completed, setCompleted, flags } = useOnboardingDetails(); - return { isReady, step, setStep, completed, setCompleted }; + return { isReady, step, setStep, completed, setCompleted, flags }; };