import { useDispatch } from "react-redux"; import { DeviceModelId } from "@ledgerhq/types-devices"; import { usePostOnboardingContext } from "./usePostOnboardingContext"; import { useCallback } from "react"; import { useFeatureFlags } from "../../featureFlags"; import { initPostOnboarding, postOnboardingSetFinished } from "../actions"; type StartPostOnboardingOptions = { deviceModelId: DeviceModelId; mock?: boolean; fallbackIfNoAction?: () => void; resetNavigationStack?: boolean; }; /** * Use this to initialize AND navigate to the post onboarding hub for a given * device model. * * @param deviceModelId * @returns a function that can be called to initialize the post * onboarding for the given device model and navigate to the post onboarding * hub. * TODO: unit test this */ export function useStartPostOnboardingCallback(): (options: StartPostOnboardingOptions) => void { const dispatch = useDispatch(); const { getFeature } = useFeatureFlags(); const { getPostOnboardingActionsForDevice, navigateToPostOnboardingHub } = usePostOnboardingContext(); return useCallback( (options: StartPostOnboardingOptions) => { const { deviceModelId, mock = false, fallbackIfNoAction, resetNavigationStack } = options; const actions = getPostOnboardingActionsForDevice(deviceModelId, mock).filter( actionWithState => !actionWithState.featureFlagId || getFeature(actionWithState.featureFlagId)?.enabled, ); dispatch( initPostOnboarding({ deviceModelId, actionsIds: actions.map(action => action.id), }), ); if (actions.length === 0) { dispatch(postOnboardingSetFinished()); if (fallbackIfNoAction) fallbackIfNoAction(); return; } navigateToPostOnboardingHub(resetNavigationStack); }, [dispatch, getFeature, getPostOnboardingActionsForDevice, navigateToPostOnboardingHub], ); }