@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
57 lines • 2.54 kB
JavaScript
import { useSelector } from "react-redux";
import { useMemo } from "react";
import { useFeatureFlags } from "../../featureFlags";
import { hubStateSelector } from "../reducer";
import { usePostOnboardingContext } from "./usePostOnboardingContext";
const getIsFeatureEnabled = (action, getFeature) => {
if (!action)
return false;
if (!action.featureFlagId)
return true;
const flag = getFeature(action.featureFlagId);
if (!flag?.enabled)
return false;
return !action.featureFlagParamId || !!flag.params?.[action.featureFlagParamId];
};
/**
* @returns an object representing the state that should be rendered on the post
* onboarding hub screen.
*
* This takes feature flagging into account so the logic is
* resistant to flags getting enabled/disabled over time (for a given disabled
* feature flag, the actions pointing to it will be excluded).
* */
export function usePostOnboardingHubState() {
const hubState = useSelector(hubStateSelector);
const postOnboardingContext = usePostOnboardingContext();
const { getPostOnboardingAction } = postOnboardingContext;
const { getFeature } = useFeatureFlags();
return useMemo(() => {
if (!getPostOnboardingAction)
return {
deviceModelId: hubState.deviceModelId,
lastActionCompleted: null,
actionsState: [],
postOnboardingInProgress: hubState.postOnboardingInProgress,
};
const actionsState = hubState.actionsToComplete.flatMap(actionId => {
const action = getPostOnboardingAction(actionId);
const isFeatureEnabled = getIsFeatureEnabled(action, getFeature);
if (!action || !isFeatureEnabled) {
return [];
}
return [{ ...action, completed: !!hubState.actionsCompleted[actionId] }];
});
const lastActionCompleted = hubState.lastActionCompleted
? getPostOnboardingAction(hubState.lastActionCompleted)
: null;
const isLastActionCompletedEnabled = lastActionCompleted && getIsFeatureEnabled(lastActionCompleted, getFeature);
return {
deviceModelId: hubState.deviceModelId,
lastActionCompleted: isLastActionCompletedEnabled ? lastActionCompleted : null,
actionsState,
postOnboardingInProgress: hubState.postOnboardingInProgress,
};
}, [getFeature, hubState, getPostOnboardingAction]);
}
//# sourceMappingURL=usePostOnboardingHubState.js.map