import { useContext, useCallback, useState } from 'react'; import { HackleContext } from '../components'; import { FeatureFlagDecision, DecisionReason } from '../models'; import { InputUtil } from '../utils'; export function useFeatureFlagDetail(featureKey: number): FeatureFlagDecision { const { hackle, userVersion } = useContext(HackleContext); const getFeatureDetail = useCallback(() => { if (!hackle) { return FeatureFlagDecision.off(DecisionReason.SDK_NOT_READY); } return FeatureFlagDecision.withReactNativeFeatureFlagDecision( hackle.featureFlagDetailSync(featureKey) ); }, [featureKey, hackle]); const [featureDetail, setFeatureDetail] = useState(() => { if (!hackle) { return FeatureFlagDecision.off(DecisionReason.SDK_NOT_READY); } return getFeatureDetail(); }); const currentInput = { key: featureKey, userVersion, }; const [prevInput, setPrevInput] = useState(currentInput); if (!InputUtil.isInputEqual(prevInput, currentInput)) { setPrevInput(currentInput); setFeatureDetail(getFeatureDetail()); } return featureDetail; }